Тема такая..
Есть база данных.. в ней есть поле типом 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, Вы писали:
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 <имя поля>)
Здравствуйте 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
Здравствуйте Abbat, Вы писали:
A>Нет.. нужно подсчитать именно в этом поле..
Что-то я не понял
Если надо посчитать количество строк с различными GUID то можно так:
select count (*) from table_name group by field_name
Здравствуйте Bell, Вы писали:
B>Здравствуйте Abbat, Вы писали:
A>>Нет.. нужно подсчитать именно в этом поле.. B>Что-то я не понял B>Если надо посчитать количество строк с различными GUID то можно так:
B>
B>select count (*) from table_name group by field_name
B>
В этом случае он выдаст мне список из количества записей с одинаковым именем... а мне нужно кол-во уникальных записей!
Здравствуйте 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, Вы писали:
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
возможно сдетай конверт поля своего в другой тип
Здравствуйте 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)
Здравствуйте 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
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!
Здравствуйте 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
)
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 уникален, а во втором вернутся все, даже не уникальные записи, но в одном экземпляре.
M>Потому что это два совершенно разных запроса. M>В первом случае тебе вернутся только те записи, у которых id уникален, а во втором вернутся все, даже не уникальные записи, но в одном экземпляре.
Мда-с, опять не договорились о терминах. ;(
Лично я всю жизть думал что "количество уникальных записей" это именно второе, т.е. количетсво записей отличающихся от всех остальных записей, а не количество записей с единичной повторяемостью...
0 программистов ругал сердитый шеф,
потом уволил одного, и стало их FF!
Z2>Мда-с, опять не договорились о терминах. ;( Z2>Лично я всю жизть думал что "количество уникальных записей" это именно второе, т.е. количетсво записей отличающихся от всех остальных записей, а не количество записей с единичной повторяемостью...
Нда, с терминами просто бедулька.
Определимся:
Что есть уникальная запись? Это есть запись, которая более нигде не повторяется, уникальна она. Тоесть повторяемость у нее нулевая (единичная) и, следовательно, эта запись отлична от всех других.
Далее, что делать с записями которые не уникальны? Так и называть их "не уникальными" и писать в каком количестве они нужны.
Но суть не в этом, а в том, что запросы на самом деле разные.
Здравствуйте 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 ...) не принимаются.
А мне казалось, что должны бы...