Используя SQL, как получить строки, удовлетворяющие одному из нескольких условий, с помощью дополнительных логических столбцов, показывающих, какое именно условие было выполнено - PullRequest
0 голосов
/ 07 марта 2019

Я хотел бы запросить таблицу для таких случаев, которые удовлетворяют любому из нескольких условий

... 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 |
+-----+-                      -+-------+-------+-------+

Есть идеи, как это сделать?

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Вы можете использовать просто 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'
       )
1 голос
/ 07 марта 2019

Либо просто поместите те же условия в список выбора:

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

Использование функции ANSI SQL T031, "тип данных BOOLEAN".

В качестве альтернативы используйте 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

Core ANSI SQL.

...