转置查询结果?

时间:2012-06-08 10:05:37

标签: sql sql-server sql-server-2008

我有一个函数,可生成5列结果(例如10行)。

此数据正被插入到键值表中,因此我需要将其插入到50行的格式中以便插入。

目前我正在选择每个列五次并将结果合并在一起。因为它是相同的查询运行五次,但每次只选择一列这似乎非常低效。理想情况下,我只能运行一次查询,但将数据从5 x 10转换为1 x 50。

因此,如果我的查询返回两行:[ID],[ColA],[ColB],[ColC],[ColD],[ColE]

我想把它变成格式:

[ID0],[ColA0]

[ID0],[ColB0]

[ID0],[ColC0]

[ID0],[ColD0]

[ID0],[ColE0]

[ID1],[ColA1]

[ID1],[ColB1]

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

只需将CTE替换为您的数据,您应该好好去。

;WITH CTE AS
(   SELECT 1 [ID], 'A1' [ColA], 'B1' [ColB], 'C1' [ColC], 'D1' [ColD], 'E1' [ColE]
    UNION ALL
    SELECT 2 [ID], 'A2' [ColA], 'B2' [ColB], 'C2' [ColC], 'D2' [ColD], 'E2' [ColE]
)
SELECT  [ID], [ColumnName], Value
FROM    CTE
        UNPIVOT
        (   Value
            FOR [ColumnName] IN ([ColA], [ColB], [ColC], [ColD], [ColE])
        ) upvt