我需要一只手如何从下面的源表构造一个结果表。
来源表:
+-----+-------+--------+-----------+
| Cat | Data_1| Data_2 | Group_Idx |
+-----+-------+--------+-----------+
| 1-1 | A11 | B11 | 1 |
| 1-2 | A12 | B12 | 1 |
| 1-3 | A13 | B13 | 1 |
| 2-1 | A21 | B21 | 2 |
| 2-2 | A22 | B22 | 2 |
| 2-3 | A23 | B23 | 2 |
| 3-1 | A31 | B31 | 3 |
| 3-2 | A32 | B32 | 3 |
| 3-3 | A33 | B33 | 3 |
+-----+-------+--------+-----------+成果表:
+-----+-------+-------+-------+-------+-------+-------+
| Idx | C_1_A | C_1_B | C_2_A | C_2_B | C_3_A | C_3_B |
+-----+-------+-------+-------+-------+-------+-------+
| 1 | A11 | B11 | A21 | B21 | A31 | B31 |
| 2 | A12 | B12 | A22 | B22 | A32 | B32 |
| 3 | A13 | B13 | A23 | B23 | A33 | B33 |
+-----+-------+-------+-------+-------+-------+-------+在源表列Cat中,例如1-1的数据将显示在结果表列的C_1_A、C_1_B和Idx 1下面。
例如,Cat 3-3的数据将显示在结果表的列C_3_A和C_3_B下面。
我的方法:
发布于 2020-11-23 14:51:55
您可以使用条件聚合。我不知道您是希望cat的第三个字符定义结果中的列,还是只对类别进行排序。这采用了后一种方法:
select group_idx,
max(case when seqnum = 1 then data_1 end) as c_1_a,
max(case when seqnum = 1 then data_2 end) as c_1_b,
max(case when seqnum = 2 then data_1 end) as c_2_a,
max(case when seqnum = 2 then data_2 end) as c_2_b,
max(case when seqnum = 3 then data_1 end) as c_3_a,
max(case when seqnum = 3 then data_2 end) as c_3_b
from (select s.*,
row_number() over (partition by group_idx order by cat) as seqnum
from source s
) s
group by group_idx;这里是db<>fiddle。
https://stackoverflow.com/questions/64970689
复制相似问题