SQL:旋转后合并行
SQL: Combining rows after pivoting
我正在编写的 SQL 查询的一部分处理通用元数据 table。因此,我正在调整所需的元素以适应我需要的格式。我用“case”来做,我不确定这是不是问题,但是这个子查询的结果是这样的格式:
╔════╦═══════╦═══════╗
║ ID ║ DATA1 ║ DATA2 ║
╠════╬═══════╬═══════╣
║ 1 ║ 1 ║ (NULL)║
║ 1 ║(NULL) ║ 2 ║
║ 1 ║(NULL) ║ (NULL)║
║ 2 ║(NULL) ║ (NULL)║
║ 2 ║ 2 ║ (NULL)║
║ 3 ║(NULL) ║ (NULL)║
║ 4 ║(NULL) ║ (NULL)║
╚════╩═══════╩═══════╝
不是最漂亮的输出,但我想我可以用“GROUP BY ID”修复它以简化输出。如下:
╔════╦═══════╦═══════╗
║ ID ║ DATA1 ║ DATA2 ║
╠════╬═══════╬═══════╣
║ 1 ║(NULL) ║ (NULL)║ ?????
║ 2 ║(NULL) ║ 2 ║
║ 3 ║(NULL) ║ (NULL)║
║ 4 ║(NULL) ║ (NULL)║
╚════╩═══════╩═══════╝
可能我对GROUP BY的理解从根本上是错误的,但没想到ID 1的结果是这样的。现在我正在寻找一种合并行的方法。它应该看起来像这样:
╔════╦═══════╦═══════╗
║ ID ║ DATA1 ║ DATA2 ║
╠════╬═══════╬═══════╣
║ 1 ║ 1 ║ 2 ║
║ 2 ║(NULL) ║ 2 ║
║ 3 ║(NULL) ║ (NULL)║
║ 4 ║(NULL) ║ (NULL)║
╚════╩═══════╩═══════╝
因此,简单地将行“相加”就足够了,因为对于一个 ID,单个数据列中永远不会有两个值。所以它总是“数字+ NULL”。有没有办法毫不费力地做到这一点?我觉得这应该不是什么大问题,但我想不出解决办法。
使用聚合查询:
SELECT ID, MAX(DATA1) AS DATA1, MAX(DATA2) AS DATA2
FROM yourTable
GROUP BY ID
ORDER BY ID;
我正在编写的 SQL 查询的一部分处理通用元数据 table。因此,我正在调整所需的元素以适应我需要的格式。我用“case”来做,我不确定这是不是问题,但是这个子查询的结果是这样的格式:
╔════╦═══════╦═══════╗
║ ID ║ DATA1 ║ DATA2 ║
╠════╬═══════╬═══════╣
║ 1 ║ 1 ║ (NULL)║
║ 1 ║(NULL) ║ 2 ║
║ 1 ║(NULL) ║ (NULL)║
║ 2 ║(NULL) ║ (NULL)║
║ 2 ║ 2 ║ (NULL)║
║ 3 ║(NULL) ║ (NULL)║
║ 4 ║(NULL) ║ (NULL)║
╚════╩═══════╩═══════╝
不是最漂亮的输出,但我想我可以用“GROUP BY ID”修复它以简化输出。如下:
╔════╦═══════╦═══════╗
║ ID ║ DATA1 ║ DATA2 ║
╠════╬═══════╬═══════╣
║ 1 ║(NULL) ║ (NULL)║ ?????
║ 2 ║(NULL) ║ 2 ║
║ 3 ║(NULL) ║ (NULL)║
║ 4 ║(NULL) ║ (NULL)║
╚════╩═══════╩═══════╝
可能我对GROUP BY的理解从根本上是错误的,但没想到ID 1的结果是这样的。现在我正在寻找一种合并行的方法。它应该看起来像这样:
╔════╦═══════╦═══════╗
║ ID ║ DATA1 ║ DATA2 ║
╠════╬═══════╬═══════╣
║ 1 ║ 1 ║ 2 ║
║ 2 ║(NULL) ║ 2 ║
║ 3 ║(NULL) ║ (NULL)║
║ 4 ║(NULL) ║ (NULL)║
╚════╩═══════╩═══════╝
因此,简单地将行“相加”就足够了,因为对于一个 ID,单个数据列中永远不会有两个值。所以它总是“数字+ NULL”。有没有办法毫不费力地做到这一点?我觉得这应该不是什么大问题,但我想不出解决办法。
使用聚合查询:
SELECT ID, MAX(DATA1) AS DATA1, MAX(DATA2) AS DATA2
FROM yourTable
GROUP BY ID
ORDER BY ID;