如何将列转换为行?

时间:2011-11-03 13:09:21

标签: sql sql-server tsql

我需要你的帮助.. 我有一个动态查询,以这种格式返回数据..

Item1  Item1Remarks  Item2  Item2Remarks  Item3  Item3Remarks  Item4  tem4Remarks
==
2      bla bla       5      bla bla       1      bla bla       4      bla bla

项目名称可以变化(可以更改,因为数据是动态的)。项目列包含项目数量。

现在我需要这种格式的数据。

Item    Qty Remarks
==
Item1   2   bla bla
Item2   5   bla bla
Item3   1   bla bla
Item4   4   bla bla

2 个答案:

答案 0 :(得分:5)

请参阅MSDN上的Using PIVOT and UNPIVOT

答案 1 :(得分:4)

要专门回答您的问题,您基本上需要一个复杂的多列UNPIVOT查询,例如:

SELECT Item, Qty, Remarks
FROM ItemDetail
UNPIVOT -- This UNPIVOT gives us the Item column
(  
  Qty FOR Item IN (Item1, Item2, Item3, Item4)  
) TheItem  
UNPIVOT -- This UNPIVOT gives us the corresponding Remarks column
(  
  Remarks FOR ItemRemarks IN (Item1Remarks, Item2Remarks, 
                              Item3Remarks, Item4Remarks)  
) Ct  
WHERE RIGHT(Item,1)=SUBSTRING(ItemRemarks,5,1) -- Match items with their remarks

您没有指定表的名称,因此请将ItemDetail替换为其实际名称。