1
ID  Risk_1  Risk_2  Risk_3  Risk_4
XYZ Yes             Yes     Yes
ABC Yes
PQR Yes     Yes

上記の表からわかるように、複数のリスクが関連付けられているIDがあります。1つのリスクのみが関連付けられているIDの出力を取得したいと思います。

上記の場合、risk_1のみを持つすべてのIDが必要なので、結果はABCになります。

SQLを使用してこれを行うにはどうすればよいですか?

4

4 に答える 4

2

Risksそれがnull許容であると仮定します。

SELECT  ID
FROM    tableName
WHERE   CASE WHEN Risk_1 IS NOT NULL THEN 1 ELSE 0 END +
        CASE WHEN Risk_2 IS NOT NULL THEN 1 ELSE 0 END +
        CASE WHEN Risk_3 IS NOT NULL THEN 1 ELSE 0 END +
        CASE WHEN Risk_4 IS NOT NULL THEN 1 ELSE 0 END  = 1

ただし、それらが空の文字列である場合、

SELECT  ID
FROM    tableName
WHERE   CASE WHEN Risk_1 <> '' THEN 1 ELSE 0 END +
        CASE WHEN Risk_2 <> '' THEN 1 ELSE 0 END +
        CASE WHEN Risk_3 <> '' THEN 1 ELSE 0 END +
        CASE WHEN Risk_4 <> '' THEN 1 ELSE 0 END  = 1
于 2013-03-06T04:12:59.827 に答える
0

テーブルに列がIDありrisk_type、リスクタイプごとに行があるようにスキーマを変更した場合、次のようなクエリを実行できます。

SELECT ID
FROM Table1
GROUP BY ID
HAVING COUNT(*) = 1

SQLFiddle

再編集:どのリスクタイプを持っているかを指定しないように変更されました

于 2013-03-06T04:26:57.483 に答える
0

これは、NULL、空の文字列、または Yes 以外の値 (No など) で機能します。

SELECT ID
  FROM Table1
  WHERE COALESCE(Risk_1, 'No') = 'Yes'  AND
        COALESCE(Risk_2, 'No') <> 'Yes' AND
        COALESCE(Risk_3, 'No') <> 'Yes' AND
        COALESCE(Risk_4, 'No') <> 'Yes'

sqlfiddle

于 2013-03-06T04:16:37.987 に答える
0

リスクの値が次の場合のみ'Yes'、以下のクエリが機能します

select ID from table where risk1||risk2||risk3||risk4='Yes'

リスクの値がのみ'Yes'で、空のリスクがspacesnullの代わりにある場合、以下のクエリが機能します

select ID from table where replace(risk1||risk2||risk3||risk4,' ','')='Yes'
于 2013-03-06T11:13:09.270 に答える