不能按位列分组

时间:2009-08-26 13:32:49

标签: sql-server group-by bit

在sql server 2005中,我在查询构建器中,选择“自动添加分组” 将group by子句添加到我选择的所有字段中。如果这些字段中的一个或多个是位类型,我会收到错误。为什么是这样?将列转换为TINYINT是一个很好的解决方法吗?

2 个答案:

答案 0 :(得分:3)

这看起来像是该工具的限制。如果您只是自己在SQL Server Management Studio中编写实际的sql,它将会起作用。

这是我的测试代码:

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

输出

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)

答案 1 :(得分:2)

这些工具不允许对位列进行索引或分组等操作。原始SQL。

注意,您无法在位列上进行聚合。你必须先施展。当然,平均位列有点毫无意义,但MAX / MIN可用作跨越多行的OR / AND。