1
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

4 回答 4

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
于 2013-03-06T04:12:59.827 回答
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

如果您更改了架构,使您的表具有列ID,并且risk_type每种风险类型都有一行,您可以进行如下查询:

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

SQLFiddle

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

于 2013-03-06T04:26:57.483 回答
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'
于 2013-03-06T11:13:09.270 回答