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を使用してこれを行うにはどうすればよいですか?
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
テーブルに列がID
ありrisk_type
、リスクタイプごとに行があるようにスキーマを変更した場合、次のようなクエリを実行できます。
SELECT ID
FROM Table1
GROUP BY ID
HAVING COUNT(*) = 1
再編集:どのリスクタイプを持っているかを指定しないように変更されました
これは、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'
リスクの値が次の場合のみ'Yes'
、以下のクエリが機能します
select ID from table where risk1||risk2||risk3||risk4='Yes'
リスクの値がのみ'Yes'
で、空のリスクがspaces
nullの代わりにある場合、以下のクエリが機能します
select ID from table where replace(risk1||risk2||risk3||risk4,' ','')='Yes'