我有一个包含的表,例如:
ID CVG
4 A
4 C
5 B
每行包含给定ID的coverage。如果ID没有覆盖范围,则表中将没有行(例如,ID 4没有覆盖范围B)。
从这张表中我想写一个像
这样的查询SELECT ID, A = case (when ??? then 'TRUE' when ??? then 'FALSE'), B = case (...), C = case (...) FROM TABLE
将提供输出
ID A B C
4 TRUE FALSE TRUE
5 FALSE TRUE FALSE
每个ID只有一行,每个coverage只有一列。
对此有什么可行的查询?我不允许更改服务器上的任何永久表,所以我试图用我所拥有的解决方案。
答案 0 :(得分:1)
您可以使用条件聚合来获取所需的结果:
SELECT ID,
CASE
WHEN COUNT(CASE WHEN CVG = 'A' THEN 1 END)>=1 THEN 'TRUE'
ELSE 'FALSE'
END AS A,
CASE
WHEN COUNT(CASE WHEN CVG = 'B' THEN 1 END)>=1 THEN 'TRUE'
ELSE 'FALSE'
END AS B,
CASE
WHEN COUNT(CASE WHEN CVG = 'C' THEN 1 END)>=1 THEN 'TRUE'
ELSE 'FALSE'
END AS C,
.... etc
FROM mytable
GROUP BY ID
答案 1 :(得分:0)
如果你想让它选择
A = case (when ??? then 'TRUE' when ??? then 'FALSE'), B = case (...), C = case (...)
这是我从你的言论中得到的,你需要做的是
SELECT id, A, B, C FROM TABLE WHERE A = case (when ??? then 'TRUE' when ??? then 'FALSE'), B = case (...), C = case (...)
答案 2 :(得分:0)
你可以这样做:
select
ID,
max(case when CVG = 'A' then 'TRUE' else 'FALSE' end),
max(case when CVG = 'B' then 'TRUE' else 'FALSE' end),
max(case when CVG = 'C' then 'TRUE' else 'FALSE' end),
from
table
group by
ID
如果为该ID找到一行,则大小写+ max将选择true,否则为false。