使用 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'
)
我想查询一个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'
)