1

複数の行を返す結合クエリがあります

ID    SearchID   Bool1      Bool2    Bool2
1     1          1          1        0
1     1          0          0        0
5     1          1          0        0
6     1          0          0        0
9     1          0          0        0

最初の列IDは省略できます。これにより、

SearchID   Bool1      Bool2    Bool2
1          1          1        0
1          0          0        0
1          1          0        0
1          0          0        0
1          0          0        0

返されるすべてのデータはSearchID1に適用されるため、すべてのブールフィールドの結果をマージする行になります。

SearchID   Bool1      Bool2    Bool2
1          1          1        0

1つの行が1つあるのでIsButtonは1である必要があります1の行が1つ以上あるのでAutoRunは1である必要があります1の行がなかったのでIsOnMainは0である必要があります

しかし、返された可能性のある複数の行に対してこれを処理したいので、検索IDごとに一意の行を作成したいと思います。

ID    SearchID   Bool1      Bool2    Bool2
1     1          1          1        0
1     1          0          0        0
5     1          1          0        0
6     1          0          0        0
9     1          0          0        0
3     2          0          0        0
5     2          0          0        0
3     3          0          0        0
9     3          0          0        1
etc...

SearchID   Bool1      Bool2    Bool2
1          1          1        0
2          0          0        0
3          0          0        1
etc...

私は理にかなっていますか?

4

3 に答える 3

4
SELECT SearchID, 
       CAST(CASE WHEN SUM(CAST(Bool1 AS INT)) > 0 THEN 1 ELSE 0 END AS BIT) AS Bool1,
       CAST(CASE WHEN SUM(CAST(Bool2 AS INT)) > 0 THEN 1 ELSE 0 END AS BIT) AS Bool2,
       CAST(CASE WHEN SUM(CAST(Bool3 AS INT)) > 0 THEN 1 ELSE 0 END AS BIT) AS Bool3
FROM Table
GROUP BY SearchID
于 2012-01-19T02:05:14.153 に答える
3
SELECT SearchId
     , MAX(CAST(Bool1 AS INT)) AS Bool1
     , MAX(CAST(Bool2 AS INT)) AS Bool2
     , MAX(CAST(Bool3 AS INT)) AS Bool3
FROM TableX
GROUP BY SearchId
于 2012-01-19T02:04:29.493 に答える
2

BIT データ型を使用している場合、SUM または MAX 関数を直接使用することはできません。最初に変換する必要があります。

--Sample table
CREATE TABLE #test
(
    SearchID INT, 
    Bool1 BIT, 
    Bool2 BIT, 
    Bool3 BIT
)
GO

INSERT #test VALUES (1,1,1,0)
INSERT #test VALUES (1,0,0,0)
INSERT #test VALUES (1,1,0,0)
INSERT #test VALUES (1,0,0,0)
INSERT #test VALUES (1,0,0,0)
Go

 SELECT 
    SearchId
    ,MAX(CONVERT(INT,Bool1)) AS Bool1
    ,MAX(CONVERT(INT,Bool2)) AS Bool2
    ,MAX(CONVERT(INT,Bool3)) AS Bool3
FROM #test
GROUP BY SearchId
于 2012-01-19T02:19:13.883 に答える