Sql server 无法按位列分组

Sql server 无法按位列分组,sql-server,group-by,bit,Sql Server,Group By,Bit,在SQLServer2005中,我在查询生成器中选择“添加分组依据”以自动添加 将GROUPBY子句添加到我选择的所有字段中。如果这些字段中有一个或多个是位类型,则会出现错误。为什么会这样?将柱浇铸到Tinyin不是一个好的修复方法吗?它看起来像是该工具的一个限制。如果您只是自己在SQLServerManagementStudio中编写实际的sql,那么它就可以工作了 以下是我的测试代码: CREATE TABLE Test2 (ID INT, bitvalue bit, flag char(1

在SQLServer2005中,我在查询生成器中选择“添加分组依据”以自动添加
将GROUPBY子句添加到我选择的所有字段中。如果这些字段中有一个或多个是位类型,则会出现错误。为什么会这样?将柱浇铸到Tinyin不是一个好的修复方法吗?

它看起来像是该工具的一个限制。如果您只是自己在SQLServerManagementStudio中编写实际的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)

这似乎是该工具的一个局限性。如果您只是自己在SQLServerManagementStudio中编写实际的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)

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


注意,不能在位列上进行聚合。你必须先投。当然,对位列求平均值是没有意义的,但是MAX/MIN对于跨多行的OR/AND很有用。

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


注意,不能在位列上进行聚合。你必须先投。当然,对一位列求平均值是没有意义的,但是MAX/MIN对于跨越多行的OR/AND很有用。

错误是什么?在位字段上使用group by时我没有遇到问题。列在选择列表中无效,因为它未包含在任何聚合函数中-这是我的错误,因为在我查看@it后,我没有将其包含在group by中,所以我这样做了,然后它工作了。我在想办法把这个问题记下来,哈哈,别管了。在答案中显示您的代码。错误是什么?在位字段上使用group by时我没有遇到问题。列在选择列表中无效,因为它未包含在任何聚合函数中-这是我的错误,因为在我查看@it后,我没有将其包含在group by中,所以我这样做了,然后它工作了。我在想办法把这个问题记下来,哈哈,别管了。在答案中显示您的代码。