在 sql server 2005 中,我在查询生成器中,选择“添加分组依据”以自动将分组依据子句添加到我选择的所有字段。如果这些字段中的一个或多个是位类型,我会收到错误消息。为什么是这样?将列转换为 TINYINT 是一个很好的解决方法吗?
问问题
2270 次
2 回答
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)
于 2009-08-26T13:42:05.500 回答
2
这些工具不允许某些操作,例如对位列进行索引或分组。原始 SQL 可以。
请注意,您不能在位列上进行聚合。你必须先施法。当然,平均一点列是没有意义的,但是 MAX/MIN 作为跨多行的 OR/AND 很有用。
于 2009-08-26T14:19:41.707 回答