根据键旋转列

时间:2013-04-15 05:09:49

标签: sql sql-server tsql ssis bids

我有下表:

key_column INT,
column_type_id INT, --has only 3 values, e.g. 1,2,3
value INT

我想将该表中的数据传输到我的DW事实表中,如下所示:

key_column INT,
column_type_id INT,
column_type_1 INT,
column_type_2 INT,
column_type_3 INT

匹配标准如下:

1)使用key_column匹配列 2)使用column_type_id确定应该插入哪个列值(如果column_type_id = 1,则在丢弃column_type_id之后将值插入column_type_1等,并且不要生成重复的行,因此key_column是不同的)

有没有人知道如何通过TSQL或(最好)SSIS来做到这一点? 我还应该提到合并或重复消除的排序不是一个选项,因为我的硬件太弱,无法处理我所拥有的数据量的排序。

1 个答案:

答案 0 :(得分:1)

您可以执行INSERT INTO...SELECT以插入原始表中的透视数据

INSERT INTO DWFACT( key_column, 
                    column_type_id, 
                    column_type_1, 
                    column_type_2, 
                    column_type_3
                    )
SELECT  key_column, ColTypeID, [1], [2], [3]
FROM    
        (
            SELECT  key_column, 
                    column_type_id as ColTypeID, 
                    column_type_id, 
                    value
            FROM    TableName
        ) org
        PIVOT
        (
            MAX(value)
            FOR column_type_id IN ([1], [2], [3])
        ) pvt
ORDER   BY key_column