使用 SQL,如何获取满足多个条件之一的行以及显示满足哪个确切条件的附加布尔列

Using SQL, how to get rows satisfying one of multiple conditions with additional boolean columns displaying which exact condition was satisfied

我想查询一个table满足多个条件中任意一个的案例

... WHERE cond1 OR cond2 OR cond3

但我需要确切地知道满足了哪些条件。

我想要这样的东西

+-----+-                      -+-------+-------+-------+
| ID  | .. selected columns .. | cond1 | cond2 | cond3 |
+-----+-                      -+-------+-------+-------+
| id1 |                        | true  | false | false |
| id2 |                        | false | true  | true  |
| id3 |                        | false | true  | false |
| id4 |                        | true  | true  | false |
+-----+-                      -+-------+-------+-------+

有什么想法吗?

要么简单地把相同的条件放在select列表中:

select id, cond1, cond2, cond3
from tablename
where cond1 or cond2 or cond3

使用 ANSI SQL 功能 T031,"BOOLEAN data type"。

或者,使用 case 表达式:

select id,
       case when cond1 then 'true' else 'false' end,
       case when cond2 then 'true' else 'false' end,
       case when cond3 then 'true' else 'false' end
from tablename
where cond1 or cond2 or cond3

核心 ANSI SQL。

您可以简单地使用 CASE。我准备了一个样本,你可以看看:

--DROP TABLE TmpTable
--GO
CREATE TABLE TmpTable
(
    ID INT
    ,   Column1 VARCHAR(100)
    ,   Column2 VARCHAR(100)
    ,   Column3 VARCHAR(100)
    ,   Column4 VARCHAR(100)
);

INSERT INTO TmpTable 
VALUES  
 (1,'AA','B','C','D')
,(2,'BB','A','C','B')
,(3,'CC','E','F','G')
,(4,'DD','F','G','H')
,(5,'EE','A','G','D');


SELECT   Id
        ,Column1
        ,Column2
        ,Column3
        ,Column4
        ,CASE WHEN Column2='G' THEN 'True' ELSE 'False' END Cond1Check
        ,CASE WHEN Column3='G' THEN 'True' ELSE 'False' END Cond2Check
        ,CASE WHEN Column4='G' THEN 'True' ELSE 'False' END Cond3Check

FROM TmpTable
WHERE (
               Column2='G' 
            OR Column3='G' 
            OR Column4='G'
       )