Невозможно сгруппировать по битовому столбцу - PullRequest
1 голос
/ 26 августа 2009

В SQL Server 2005 я в построителе запросов выбираю «Добавить группу по», чтобы автоматически добавить предложение group by ко всем выбранным полям. Если одно или несколько из этих полей имеют битовый тип, я получаю сообщение об ошибке. Почему это? Является ли приведение столбца к TINYINT хорошим решением?

Ответы [ 2 ]

3 голосов
/ 26 августа 2009

Это похоже на ограничение этого инструмента. если вы просто напишите сам фактический sql в SQL Server Management Studio, он будет работать

вот мой тестовый код:

CREATE TABLE Test2
(ID INT,
bitvalue bit,
flag char(1))
GO

insert into  test2 values (1,1,'a')
insert into  test2 values (2,1,'a')
insert into  test2 values (3,1,'a')
insert into  test2 values (4,1,'b')
insert into  test2 values (5,1,'b')
insert into  test2 values (6,1,'b')
insert into  test2 values (7,1,'b')

insert into  test2 values (10,0,'a')
insert into  test2 values (20,0,'a')
insert into  test2 values (30,0,'a')
insert into  test2 values (40,0,'b')
insert into  test2 values (50,0,'b')
insert into  test2 values (60,0,'b')
insert into  test2 values (70,0,'b')

select * from test2

select count(*),bitvalue,flag from test2 group by bitvalue,flag

OUTPUT

ID          bitvalue flag
----------- -------- ----
1           1        a
2           1        a
3           1        a
4           1        b
5           1        b
6           1        b
7           1        b
10          0        a
20          0        a
30          0        a
40          0        b
50          0        b
60          0        b
70          0        b

(14 row(s) affected)

            bitvalue flag
----------- -------- ----
3           0        a
3           1        a
4           0        b
4           1        b

(4 row(s) affected)
2 голосов
/ 26 августа 2009

Инструменты не позволяют выполнять некоторые операции, такие как индексация или группировка битовых столбцов. Необработанный SQL делает.

Обратите внимание, вы не можете агрегировать по битовым столбцам. Вы должны сыграть первым. Конечно, усреднение битовых столбцов бессмысленно, но MAX / MIN полезен как OR / AND, охватывающий несколько строк.

...