ID Risk_1 Risk_2 Risk_3 Risk_4
XYZ Yes Yes Yes
ABC Yes
PQR Yes Yes
正如您从上表中看到的那样,存在具有与它们相关的多种风险的ID。我想获得只有一个风险与他们相关的ID的输出。SQL - 使用来自多个标志的唯一标志获取Id的命令
在上述情况下,我想要所有只有risk_1的ID,所以结果应该是ABC。
我该如何使用SQL完成这项工作?
ID Risk_1 Risk_2 Risk_3 Risk_4
XYZ Yes Yes Yes
ABC Yes
PQR Yes Yes
正如您从上表中看到的那样,存在具有与它们相关的多种风险的ID。我想获得只有一个风险与他们相关的ID的输出。SQL - 使用来自多个标志的唯一标志获取Id的命令
在上述情况下,我想要所有只有risk_1的ID,所以结果应该是ABC。
我该如何使用SQL完成这项工作?
假设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
ŧ帽子将使用NULL,空字符串或除Yes之外的值(例如,否)
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'
如果你改变了你的架构,以便您的表有列ID
和risk_type
与行每个风险类型,你可以有这样的查询:
SELECT ID
FROM Table1
GROUP BY ID
HAVING COUNT(*) = 1
重新编辑:修改为不再指定一个风险类型,他们有
如果风险价值仅为'Yes'
然后在下面的查询将工作
select ID from table where risk1||risk2||risk3||risk4='Yes'
如果风险价值仅为'Yes'
和空的风险有spaces
,而不是空的然后下面的查询将工作
select ID from table where replace(risk1||risk2||risk3||risk4,' ','')='Yes'