This问题类似于我需要做的事情,但投票的答案只能部分地解决问题。考虑一下这个表:
ID | TEST | RESULT
001 | AAA | +
001 | BBB | +
002 | AAA | +
003 | BBB | +
我想输出如下:
ID | AAA | BBB
001 | + | +
002 | + |
003 | | +
我上面提到的解决方案提供了与其输出相同的数据,但不会“跳过”空列,就像003
一样。因此,无法确定+
结果所引用的测试。我正在使用PostgreSQL 8.4.9。
PS:纯SQL的解决方案是否可行?这需要在PL / pgSQL中编码吗?
答案 0 :(得分:1)
对于快速而肮脏的解决方案,您可以使用:
SELECT DISTINCT
T.ID,
(SELECT A.RESULT FROM MyTable A WHERE A.TEST = 'AAA' AND A.ID = T.ID) AS AAA,
(SELECT B.RESULT FROM MyTable B WHERE B.TEST = 'BBB' AND B.ID = T.ID) AS BBB
FROM MyTable T;
如果您需要更加动态,请考虑在SELECT
中使用crosstab
功能。