sql - 在 PostgreSQL 中制表规范化数据

标签 sql postgresql

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 中编码?

最佳答案

对于一个快速而肮脏的解决方案,你可以使用这个:

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 中的函数。

关于sql - 在 PostgreSQL 中制表规范化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8035153/

相关文章:

mysql - 如何删除mysql中四个表的记录?

sql - 数据库和ERP

sql - 对于连接表中所有缺失的组合返回 0

Java ResultSet.getTimestamp() 将毫秒附加到输出

postgresql - 是否有一种功能可以知道我的几何体中有多少百分比包含在另一个几何体中?

java - PSQL异常 : ERROR: operator does not exist: character varying = uuid

SQL 代码错误输入不匹配 'from' 期待

sql - MySQL SELECT 与 join、count、order by

python - 将日期时间传递给 psycopg2

node.js - 向 json 列添加 json 数据是添加转义字符