1

SQL Server 2005 では、クエリ ビルダーで [グループの追加] を選択して、選択したすべてのフィールドに group by 句を自動的に追加します。これらのフィールドの 1 つ以上がビット型である場合、エラーが発生します。どうしてこれなの?列を TINYINT にキャストすることは良い修正ですか?

4

2 に答える 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 に答える