ID Risk_1 Risk_2 Risk_3 Risk_4
XYZ Yes Yes Yes
ABC Yes
PQR Yes Yes
从上表中可以看出,存在与其相关的多个风险的ID。我希望获得ID的输出,其中只有一个风险与它们相关联。
在上面的例子中,我想要所有只有risk_1的ID,所以结果应该是ABC。
如何使用SQL完成此操作?
答案 0 :(得分:2)
假设Risks
可以为空。
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
答案 1 :(得分: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 强>
答案 2 :(得分:0)
如果您更改了架构,因此您的表格中的列ID
和risk_type
以及每种风险类型都有一行,您可以进行如下查询:
SELECT ID
FROM Table1
GROUP BY ID
HAVING COUNT(*) = 1
重新编辑:修改为不再指定他们拥有哪种风险类型
答案 3 :(得分:0)
如果风险值仅为'Yes'
,则查询下方将起作用
select ID from table where risk1||risk2||risk3||risk4='Yes'
如果风险值仅为'Yes'
且空风险为spaces
而非空值,那么以下查询将起作用
select ID from table where replace(risk1||risk2||risk3||risk4,' ','')='Yes'