【发布时间】:2014-05-28 10:13:14
【问题描述】:
我问了这个问题,它被标记为与How to pivot unknown number of columns & no aggregate in SQL Server? 重复,但这个答案对我没有帮助。
我有一个看起来像这样的数据表,其中包含未知数量的行和值。
RecID Name Value
1 Color Red
2 Size Small
3 Weight 20lbs
4 Shape Square
我需要一个查询来返回这样的数据,为每一行构建一个列。除了列标题“名称”和“值”之外,我无法对任何内容进行硬编码。
Color Size Weight Shape
Red Small 20lbs Square
这是我到目前为止部分工作的内容:
INSERT INTO @Table VALUES
(1,'Color' ,'Red'),
(2,'Size' ,'Small'),
(3,'Weight','20lbs'),
(4,'Shape' ,'Square')
;with mycte
as
(
SELECT rn,cols,val
FROM (SELECT row_number() over(order by Name) rn, Name, Value
FROM @Table) AS src1
UNPIVOT (val FOR cols
IN ( [Name], [Value])) AS unpvt
)
SELECT *
FROM (SELECT rn,cols,val
FROM mycte) AS src2 PIVOT
( Max(val) FOR rn IN ([1], [2], [3])) AS pvt
返回:
cols 1 2 3
Name Color Shape Size
Value Red Square Small
这有两个我似乎无法解决的问题。
- 我不需要列标题和包含 cols、Name、Value 的第一列。
- 不知道如何在不指定 [x] 标识符的情况下让它为每一行构建一列。
任何指导都会很棒我已经坚持了一段时间了。
【问题讨论】:
标签: sql sql-server pivot