我的資料采用這種基本形狀:(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')
;
我想要的是,根據該行的 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 這樣的腳本語言可以很容易地完成我在這里想做的事情,但我想在更大的 SQL 查詢中將此輸出用作 WITH 子句。)
uj5u.com熱心網友回復:
您可以使用 Select 中的 Case 來執行此操作:
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
uj5u.com熱心網友回復:
可能像這樣的解決方案可以幫助您:
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 ;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/338951.html
標籤:sql
