我在sql db2中有以下数据格式:
ID Test_no Result
-- ------- ------
01 1 A
01 2 B
01 3 B
02 1 A
03 1 B
03 2 C
04 1 A
人最多可以进行3次测试,但有些人只需要至少进行1次测试(标准无关紧要)。我被要求制作表格,我讨厌使用这个短语“宽格式”,即
ID Test1 Test2 Test3
-- ----- ----- -----
01 A B B
02 A NULL NULL
03 B C NULL
04 A NULL NULL
每个人都有一个记录并记录结果,如果他们进行了一定的测试(虽然我不喜欢以这种格式工作!)我可以做类似的事情
select distinct ID,
case when Test_no = 1 then Result end as Test1,
case when Test_no = 2 then Result end as Test2,
case when Test_no = 3 then Result end as Test3
from my_table
然而,每当存在非空测试分数时,这会产生一个新行,我最终得到:
ID Test1 Test2 Test3
-- ----- ----- -----
01 A NULL NULL
01 NULL B
01 NULL NULL C
.
.
.
如何删除由于出现非空测试结果而生成的行?就像上一张表一样。
非常感谢。
答案 0 :(得分:2)
尝试这种方式:
SELECT ID,
MAX(case when Test_no = 1 then Result end) as Test1,
MAX(case when Test_no = 2 then Result end) as Test2,
MAX(case when Test_no = 3 then Result end) as Test3
FROM my_table
GROUP BY ID