我有一个表(table1),它有2列 id 和名称,下面是表格中的数据。
---- INPUT TABLE ---
id name
1 | ABC
2 | XYZ
3 | DEF
我想编写SQL,它将提供输出,如下所述
输出的列是 id , col1 , col2 和 col3 ,以下是预期的值列
1 TRUE FALSE FALSE
2 FALSE TRUE
3 FALSE FALSE TRUE
现在我想根据上面的输出编写一个SQL。
我使用带有SQL的CASE语句编写了一个SQL,但我知道应该有更好的方法来编写这个SQL并获得输出。
我的SQL:
select id, CASE WHEN NAME ='XYZ' THEN 'TRUE' ELSE 'FALSE' END AS colTRUE ,FALSE as col2,FALSE as col3 from tabel1
union all
select id, FALSE AS col1 ,CASE WHEN NAME ='XYZ' THEN 'TRUE' ELSE 'FALSE' END as col2,FALSE as col3 from tabel1
union all
select id, FALSE AS col1 ,FALSE as col2,CASE WHEN NAME ='DEF' THEN 'TRUE' ELSE 'FALSE' END col3 from tabel1
答案 0 :(得分:2)
SELECT t.id, t1.id = t.id, t2.id = t.id, t3.id = t.id
FROM table t, table t1, table t2, table t3
WHERE t1.id != t2.id
AND t2.id != t3.id
AND t1.id != t3.id
答案 1 :(得分:1)
CASE声明是您应对此情况的最佳工具。有时你只需要第一次预感。但是,您不需要union all运算符,只需在SELECT语句中将每个CASE语句用作单个值。
答案 2 :(得分:1)
我认为这正是你要找的,但我不确定为什么。
select
id,
CASE WHEN NAME ='ABC' THEN 'TRUE' ELSE 'FALSE' END AS col,
CASE WHEN NAME ='XYZ' THEN 'TRUE' ELSE 'FALSE' END AS col2,
CASE WHEN NAME ='DEF' THEN 'TRUE' ELSE 'FALSE' END AS col3
from tabel1