Как уместить это в один запрос?
От: Abbat  
Дата: 17.05.02 08:22
Оценка:
Тема такая..
Есть база данных.. в ней есть поле типом uniqueidentifier. Причем GUID формируеться не в БД.. а в COM объекте(тоесть в таблице есть совпадающие GUIDы).
Тык задача в том.. чтобы подсчитать кол-во уникальных GUIDов в данном столбце..

Практически надо реализовать запрос вида:
SELECT COUNT(DISTINCT <имя поля>) FROM <имя таблицы>
, тока тут проблема в том что COUNT не работает с uniqueidentifier
(The count-unique aggregate operation cannot take a uniqueidentifier data type as an argument.
)
Если кто сталкивался.. подскажите плз.. а то уже мозги закипают
Заранее спасибо!
Abbat
Re: Как уместить это в один запрос?
От: Bell Россия  
Дата: 17.05.02 08:41
Оценка:
Здравствуйте Abbat, Вы писали:

A> Тема такая..

A>Есть база данных.. в ней есть поле типом uniqueidentifier. Причем GUID формируеться не в БД.. а в COM объекте(тоесть в таблице есть совпадающие GUIDы).
A>Тык задача в том.. чтобы подсчитать кол-во уникальных GUIDов в данном столбце..

A>Практически надо реализовать запрос вида:

A>SELECT COUNT(DISTINCT <имя поля>) FROM <имя таблицы>
A>, тока тут проблема в том что COUNT не работает с uniqueidentifier
A>(The count-unique aggregate operation cannot take a uniqueidentifier data type as an argument.
A>)
A>Если кто сталкивался.. подскажите плз.. а то уже мозги закипают
A>Заранее спасибо!

может быть поможет что-нибудь типа

SELECT COUNT <имя  другого поля> FROM <имя таблицы> GROUP BY <имя поля>)
Любите книгу — источник знаний (с) М.Горький
Re[2]: Как уместить это в один запрос?
От: Abbat  
Дата: 17.05.02 08:55
Оценка:
Нет.. нужно подсчитать именно в этом поле..
Abbat
Re: Как уместить это в один запрос?
От: Archer  
Дата: 17.05.02 10:20
Оценка:
Здравствуйте Abbat, Вы писали:

A> Тема такая..

A>Есть база данных.. в ней есть поле типом uniqueidentifier. Причем GUID формируеться не в БД.. а в COM объекте(тоесть в таблице есть совпадающие GUIDы).
A>Тык задача в том.. чтобы подсчитать кол-во уникальных GUIDов в данном столбце..

A>Практически надо реализовать запрос вида:

A>SELECT COUNT(DISTINCT <имя поля>) FROM <имя таблицы>
A>, тока тут проблема в том что COUNT не работает с uniqueidentifier
A>(The count-unique aggregate operation cannot take a uniqueidentifier data type as an argument.
A>)
A>Если кто сталкивался.. подскажите плз.. а то уже мозги закипают
A>Заранее спасибо!

по моему подзапросом можна

select count(temp.anf)
from
(
select distinct <имя поля>,"a" as anf from table
) as temp

так для мсскл ...
Это вам не это... (с) Дикий прапор
Re[3]: Как уместить это в один запрос?
От: Bell Россия  
Дата: 17.05.02 10:36
Оценка:
Здравствуйте Abbat, Вы писали:

A>Нет.. нужно подсчитать именно в этом поле..

Что-то я не понял
Если надо посчитать количество строк с различными GUID то можно так:

select count (*) from table_name group by field_name
Любите книгу — источник знаний (с) М.Горький
Re[4]: Как уместить это в один запрос?
От: Abbat  
Дата: 17.05.02 11:31
Оценка:
Здравствуйте Bell, Вы писали:

B>Здравствуйте Abbat, Вы писали:


A>>Нет.. нужно подсчитать именно в этом поле..

B>Что-то я не понял
B>Если надо посчитать количество строк с различными GUID то можно так:

B>
B>select count (*) from table_name group by field_name
B>


В этом случае он выдаст мне список из количества записей с одинаковым именем... а мне нужно кол-во уникальных записей!
Abbat
Re[2]: Как уместить это в один запрос?
От: Abbat  
Дата: 17.05.02 11:48
Оценка:
Здравствуйте Archer, Вы писали:

A>Здравствуйте Abbat, Вы писали:


A>> Тема такая..

A>>Есть база данных.. в ней есть поле типом uniqueidentifier. Причем GUID формируеться не в БД.. а в COM объекте(тоесть в таблице есть совпадающие GUIDы).
A>>Тык задача в том.. чтобы подсчитать кол-во уникальных GUIDов в данном столбце..

A>>Практически надо реализовать запрос вида:

A>>SELECT COUNT(DISTINCT <имя поля>) FROM <имя таблицы>
A>>, тока тут проблема в том что COUNT не работает с uniqueidentifier
A>>(The count-unique aggregate operation cannot take a uniqueidentifier data type as an argument.
A>>)
A>>Если кто сталкивался.. подскажите плз.. а то уже мозги закипают
A>>Заранее спасибо!

A>по моему подзапросом можна


A>select count(temp.anf)

A>from
A>(
A>select distinct <имя поля>,"a" as anf from table
A>) as temp

A>так для мсскл ...

А вот что скажет на это SQL-server:
The count aggregate operation cannot take a uniqueidentifier data type as an argument.
Abbat
Re[3]: Как уместить это в один запрос?
От: Archer  
Дата: 17.05.02 12:40
Оценка:
Здравствуйте Abbat, Вы писали:

A>Здравствуйте Archer, Вы писали:


A>>Здравствуйте Abbat, Вы писали:


A>>> Тема такая..

A>>>Есть база данных.. в ней есть поле типом uniqueidentifier. Причем GUID формируеться не в БД.. а в COM объекте(тоесть в таблице есть совпадающие GUIDы).
A>>>Тык задача в том.. чтобы подсчитать кол-во уникальных GUIDов в данном столбце..

A>>>Практически надо реализовать запрос вида:

A>>>SELECT COUNT(DISTINCT <имя поля>) FROM <имя таблицы>
A>>>, тока тут проблема в том что COUNT не работает с uniqueidentifier
A>>>(The count-unique aggregate operation cannot take a uniqueidentifier data type as an argument.
A>>>)
A>>>Если кто сталкивался.. подскажите плз.. а то уже мозги закипают
A>>>Заранее спасибо!

A>>по моему подзапросом можна


A>>select count(temp.anf)

A>>from
A>>(
A>>select distinct <имя поля>,"a" as anf from table
A>>) as temp

A>>так для мсскл ...

A>А вот что скажет на это SQL-server:
A>The count aggregate operation cannot take a uniqueidentifier data type as an argument.


попробуй тогда создать таблицу руками с указанием типов чтоб он не делал
create table2
(
простые типы
)
insert into table2
select select distinct <имя поля>,"a" as anf from table
возможно сдетай конверт поля своего в другой тип


select count... from table2

drop table2

может и сработает Ж
Это вам не это... (с) Дикий прапор
Re: Как уместить это в один запрос?
От: Чувахин Андрей Николаевич Украина  
Дата: 17.05.02 14:50
Оценка:
Здравствуйте Abbat, Вы писали:

A> Тема такая..

A>Есть база данных.. в ней есть поле типом uniqueidentifier. Причем GUID формируеться не в БД.. а в COM объекте(тоесть в таблице есть совпадающие GUIDы).
A>Тык задача в том.. чтобы подсчитать кол-во уникальных GUIDов в данном столбце..

A>Практически надо реализовать запрос вида:

A>SELECT COUNT(DISTINCT <имя поля>) FROM <имя таблицы>
A>, тока тут проблема в том что COUNT не работает с uniqueidentifier
A>(The count-unique aggregate operation cannot take a uniqueidentifier data type as an argument.
A>)
A>Если кто сталкивался.. подскажите плз.. а то уже мозги закипают
A>Заранее спасибо!

CREATE TABLE #aa1
(UniqueColumn UNIQUEIDENTIFIER DEFAULT NEWID(),
Characters VARCHAR(10) )
GO
INSERT INTO #aa1 VALUES ('{F6D3AFBC-60A4-4D1D-8FED-2B7FF14BD9A2}', 'abc')
INSERT INTO #aa1 VALUES ('{438E3737-002B-457B-AD52-F7AC4E81E042}', 'abc')
INSERT INTO #aa1 VALUES ('{DFD9E130-FB24-4314-B489-4B9256F2E492}', 'abc')
INSERT INTO #aa1 VALUES ('{F6D3AFBC-60A4-4D1D-8FED-2B7FF14BD9A2}', 'abc')
GO

select * from #aa1

select * from #aa1 where cast(UniqueColumn as varchar(40)) in(select cast(UniqueColumn as varchar(40)) from #aa1 group by cast(UniqueColumn as varchar(40)) having count(cast(UniqueColumn as varchar(40))) = 1)

drop table #aa1
Желаю успехов, Андрей.
Re: Как уместить это в один запрос?
От: Хитрик Денис Россия RSDN
Дата: 17.05.02 16:32
Оценка:
Здравствуйте Abbat, Вы писали:

A> Тема такая..

A>Есть база данных..

Перенесено в Базы Данных из VB
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re[5]: Как уместить это в один запрос?
От: beginner Россия  
Дата: 17.05.02 20:15
Оценка:
Здравствуйте Abbat, Вы писали:

A>>>Нет.. нужно подсчитать именно в этом поле..

B>>Что-то я не понял
B>>Если надо посчитать количество строк с различными GUID то можно так:

B>>
B>>select count (*) from table_name group by field_name
B>>


A>В этом случае он выдаст мне список из количества записей с одинаковым именем... а мне нужно кол-во уникальных записей!


Нужно чуть изменить запрос и все заработает:

-- если нужно узнать только количество уникальных GUID'ов
select sum(1) as count_uniq from ( select uniq from tab group by uniq having count(*) = 1 ) as t

-- если вывести их
select tm.*
from tab as tm inner join ( select uniq from tab group by uniq having count(*) = 1 ) as tc on tc.uniq = tm.uniq
__________________
per aspera ad astra
Re[3]: Как уместить это в один запрос?
От: zaiats_2k Россия  
Дата: 18.05.02 06:00
Оценка:
A>>по моему подзапросом можна

A>>select count(temp.anf)

A>>from
A>>(
A>>select distinct <имя поля>,"a" as anf from table
A>>) as temp

A>А вот что скажет на это SQL-server:

A>The count aggregate operation cannot take a uniqueidentifier data type as an argument.

Всё гениальное просто:

SELECT     COUNT(*) AS Expr1
FROM         (SELECT DISTINCT uid_field
                       FROM          table1)


Не хочет он в качестве аргумента uniqueidentifier — ну и зачем его тогда указывать, пусть * считает, всё равно подзапрос только одно поле возвращает!
0 программистов ругал сердитый шеф,
потом уволил одного, и стало их FF!
Re: Как уместить это в один запрос?
От: Diver Россия  
Дата: 19.05.02 09:34
Оценка:
Здравствуйте Abbat, Вы писали:

A> Тема такая..

A>Есть база данных.. в ней есть поле типом uniqueidentifier. Причем GUID формируеться не в БД.. а в COM объекте(тоесть в таблице есть совпадающие GUIDы).
A>Тык задача в том.. чтобы подсчитать кол-во уникальных GUIDов в данном столбце..

A>Практически надо реализовать запрос вида:

A>SELECT COUNT(DISTINCT <имя поля>) FROM <имя таблицы>
A>, тока тут проблема в том что COUNT не работает с uniqueidentifier
A>(The count-unique aggregate operation cannot take a uniqueidentifier data type as an argument.
A>)
A>Если кто сталкивался.. подскажите плз.. а то уже мозги закипают
A>Заранее спасибо!

Попробуйте так
SELECT COUNT(*)
FROM
(
SELECT COUNT(*), identifier
FROM TABLE
GROUP BY identifier
HAVING COUNT(*) = 1
)
Re[2]: Как уместить это в один запрос?
От: zaiats_2k Россия  
Дата: 20.05.02 06:13
Оценка:
D>Попробуйте так
D>SELECT COUNT(*)
D>FROM
D> (
D> SELECT COUNT(*), identifier
D> FROM TABLE
D> GROUP BY identifier
D> HAVING COUNT(*) = 1
D> )

Неоднократно уже встречаю в здешнем форуме вот эту конструкцию:
SELECT COUNT(*), identifier
  FROM TABLE
  GROUP BY identifier
  HAVING COUNT(*) = 1

Объясните, зачем так извращаться, когда есть DISTINCT?
SELECT DISTINCT uid_field
FROM table1
0 программистов ругал сердитый шеф,
потом уволил одного, и стало их FF!
Re[3]: Как уместить это в один запрос?
От: Merle Австрия http://rsdn.ru
Дата: 20.05.02 07:03
Оценка:
Здравствуйте zaiats_2k, Вы писали:



Z2>Неоднократно уже встречаю в здешнем форуме вот эту конструкцию:

Z2>
Z2>SELECT COUNT(*), identifier
Z2>  FROM TABLE
Z2>  GROUP BY identifier
Z2>  HAVING COUNT(*) = 1
Z2>

Z2>Объясните, зачем так извращаться, когда есть DISTINCT?
Z2>
Z2>SELECT DISTINCT uid_field
Z2>FROM table1
Z2>


Потому что это два совершенно разных запроса.
В первом случае тебе вернутся только те записи, у которых id уникален, а во втором вернутся все, даже не уникальные записи, но в одном экземпляре.
Мы уже победили, просто это еще не так заметно...
Re[4]: Как уместить это в один запрос?
От: zaiats_2k Россия  
Дата: 20.05.02 07:10
Оценка:
Здравствуйте Merle, Вы писали:

M>Здравствуйте zaiats_2k, Вы писали:




Z2>>Неоднократно уже встречаю в здешнем форуме вот эту конструкцию:

Z2>>
Z2>>SELECT COUNT(*), identifier
Z2>>  FROM TABLE
Z2>>  GROUP BY identifier
Z2>>  HAVING COUNT(*) = 1
Z2>>

Z2>>Объясните, зачем так извращаться, когда есть DISTINCT?
Z2>>
Z2>>SELECT DISTINCT uid_field
Z2>>FROM table1
Z2>>


M>Потому что это два совершенно разных запроса.

M>В первом случае тебе вернутся только те записи, у которых id уникален, а во втором вернутся все, даже не уникальные записи, но в одном экземпляре.

Мда-с, опять не договорились о терминах. ;(
Лично я всю жизть думал что "количество уникальных записей" это именно второе, т.е. количетсво записей отличающихся от всех остальных записей, а не количество записей с единичной повторяемостью...
0 программистов ругал сердитый шеф,
потом уволил одного, и стало их FF!
Re[5]: К вопросу об уникальности...
От: Merle Австрия http://rsdn.ru
Дата: 20.05.02 08:05
Оценка:
Здравствуйте zaiats_2k, Вы писали:



Z2>Мда-с, опять не договорились о терминах. ;(

Z2>Лично я всю жизть думал что "количество уникальных записей" это именно второе, т.е. количетсво записей отличающихся от всех остальных записей, а не количество записей с единичной повторяемостью...
Нда, с терминами просто бедулька.

Определимся:

Что есть уникальная запись? Это есть запись, которая более нигде не повторяется, уникальна она. Тоесть повторяемость у нее нулевая (единичная) и, следовательно, эта запись отлична от всех других.


Далее, что делать с записями которые не уникальны? Так и называть их "не уникальными" и писать в каком количестве они нужны.


Но суть не в этом, а в том, что запросы на самом деле разные.
Мы уже победили, просто это еще не так заметно...
Re: Как уместить это в один запрос?
От: Vaso Австралия  
Дата: 20.05.02 14:38
Оценка:
Здравствуйте Abbat, Вы писали:

A> Тема такая..

A>Есть база данных.. в ней есть поле типом uniqueidentifier. Причем GUID формируеться не в БД.. а в COM объекте(тоесть в таблице есть совпадающие GUIDы).
A>Тык задача в том.. чтобы подсчитать кол-во уникальных GUIDов в данном столбце..

A>Практически надо реализовать запрос вида:

A>SELECT COUNT(DISTINCT <имя поля>) FROM <имя таблицы>
A>, тока тут проблема в том что COUNT не работает с uniqueidentifier
A>(The count-unique aggregate operation cannot take a uniqueidentifier data type as an argument.
A>)
A>Если кто сталкивался.. подскажите плз.. а то уже мозги закипают :???:
A>Заранее спасибо!

Вот еще вариант без подзапросов:
select cast(uniq as char(40)) as expr from my4test group by uniq having (count(cast(uniq as char(40))) = 1)
compute count(cast(uniq as char(40)))


Кстати, запросы типа select * from (select ...) не принимаются.
А мне казалось, что должны бы...
Vaso
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.