#sql
Вопрос:
Мои данные принимают такую базовую форму: (http://sqlfiddle.com /#!9/d4ae98/1)
CREATE TABLE Table1
(`ID` int, `Type` varchar(1));
INSERT INTO Table1
(`ID`, `Type`)
VALUES
(123, 'A'),
(123, 'B'),
(123, 'C'),
(456, 'A'),
(789, 'A'),
(789, 'B')
;
Мне нужен третий столбец, который является true / false для каждой строки, в зависимости от того, имеет ли значение ID этой строки type=’B’ где-либо в данных. Таким образом, желаемый результат будет:
ID Type V3
123 A t
123 B t
123 C t
456 A f
789 A t
789 B t
Каков наилучший способ сделать это? (И, да, я знаю, что язык сценариев, такой как R или Python, может легко сделать то, что я хочу здесь, но я хочу использовать этот вывод как предложение WITH в более крупном SQL-запросе.)
Ответ №1:
Вы можете сделать это с помощью регистра в Select:
select *, CASE
WHEN id in (select id from table1 where type like '%B%') then 't'
ELSE 'f'
END V3
from table1;
Ссылка на скрипку: http://sqlfiddle.com /#!9/e47bc37/1
Ответ №2:
Может ли вам помочь подобное решение:
with Table2 as (
select * from table1 where type ='B'
)
select t1.*, case t2.type when 'B' then 't' else 'f' end v3 from table1 t1 left
outer join table2 t2 on t1.id = t2.id ;