我在SEQUENCE_NUMBER表中有以下数据:
NUMBER |BUSINESS_VALUE|TEMP_V|SEQUENCE_NUMBER
123 |10 |10 |1
123 |20 |20 |2
123 |30 |30 |4
234 |40 |50 |1
我想将数据转换如下:
NUMBER|VALUE_1|VALUE_2|VALUE_3|VALUE_4|TEMP_1|TEMP_2|TEMP_3|TEMP_4
123 |10 |20 |NULL |30 |10 |20 |NULL |30
234 |40 |NULL |NULL |NULL |50 |NULL |NULL |NULL
因此,基于SEQUENCE_NUMBER,我决定在插入其他表时应使用哪个列号。 你知道如何在SQL中执行这种“合并”/“线性化”操作吗?
答案 0 :(得分:1)
如果您具有已知(或最大)数量的值,并且不想使用DYNAMIC
子查询将UNPIVOT您的源数据
示例强>
Select *
From (
Select A.[NUMBER]
,B.*
From YourTable A
Cross Apply (
values (concat('Value_',[SEQUENCE_NUMBER]),[BUSINESS_VALUE])
,(concat('Temp_',[SEQUENCE_NUMBER]),[TEMP_V])
) B(Item,Value)
) src
Pivot (max(Value) for Item in ([VALUE_1],[VALUE_2],[VALUE_3],[VALUE_4],[TEMP_1],[TEMP_2],[TEMP_3],[TEMP_4]))pvt
<强>返回强>