Табулировать нормализованные данные в PostgreSQL - PullRequest
1 голос
/ 07 ноября 2011

Этот вопрос похож на то, что мне нужно сделать, но голосующий ответ лишь частично решает проблему.Рассмотрим следующую таблицу:

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 вместо этого?

1 Ответ

1 голос
/ 07 ноября 2011

Для быстрого и грязного решения вы можете использовать это:

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;

Если вам нужно более динамичное решение, рассмотрите возможность использования функции crosstab в SELECT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...