SQL - 从多个标志获取具有唯一标志的Id的命令

时间:2013-03-06 04:09:56

标签: sql select

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完成此操作?

4 个答案:

答案 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)

如果您更改了架构,因此您的表格中的列IDrisk_type以及每种风险类型都有一行,您可以进行如下查询:

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

SQLFiddle

重新编辑:修改为不再指定他们拥有哪种风险类型

答案 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'