SQL Challenge 将行连接到每个组的末尾

问题描述

我有下表,我需要展平数据。

从这里

表一

id      val1   val2   ....valn 
-----------------------------------
1         a      z
1         b      x
1         c      v 
2         a      w
2         b      q 
..n

到这里

id      val1_1   val2_1   ....valn_1   val1_2  val2_2 ... valn_2  ....  val1_n...valn_n 
-----------------------------------
1         a      z                        b       x
2         a      w                        b       q 
..n

有什么想法吗?

我使用游标做了一些事情,但是它有点讨厌并且有一些错误。支点?

解决方法

是的,您需要一个数据透视表,但您还需要计算一个行号以进行数据透视。然而,鉴于这是一个多列数据透视,使用条件聚合可能更容易。

我建议您为行号选择正确的顺序

SELECT
  id,val1_1 = MAX(CASE WHEN t.rn = 1 THEN t.val1 END),val2_1 = MAX(CASE WHEN t.rn = 1 THEN t.val2 END),val3_1 = MAX(CASE WHEN t.rn = 1 THEN t.val3 END),--  ...........
  val1_2 = MAX(CASE WHEN t.rn = 2 THEN t.val1 END),val2_2 = MAX(CASE WHEN t.rn = 2 THEN t.val2 END),val3_2 = MAX(CASE WHEN t.rn = 2 THEN t.val3 END),--  ...........
FROM (
    SELECT *,rn = ROW_NUMBER() OVER (PARTITION BY t.rn ORDER BY (SELECT 1))
    FROM table1 t
) t
GROUP BY t.id;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...