根据序列号将记录合并为一个

时间:2017-11-02 19:26:34

标签: sql sql-server

我在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中执行这种“合并”/“线性化”操作吗?

1 个答案:

答案 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

<强>返回

enter image description here