我有一个函数,可生成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]
答案 0 :(得分:1)
使用PIVOT和UNPIVOT
检查这些链接
http://msdn.microsoft.com/en-us/library/ms177410(v=sql.105).aspx
http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a-simple-sample.aspx
答案 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