摆脱sql db2中的冗余行

时间:2014-05-06 13:52:31

标签: sql db2

我在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
.
.
.

如何删除由于出现非空测试结果而生成的行?就像上一张表一样。

非常感谢。

1 个答案:

答案 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