将值行标题为列标题

时间:2017-06-03 16:12:43

标签: sql sql-server pivot

如何制作以下sql结果:

enter image description here

在像这样的结果集中呈现

| ID  | Chain Size      | Length  | Hook Type  | Shortening Grab |
|-----|-----------------|---------|------------|-----------------|
| 163 | 7mm (1.5 tonne) | 1 metre | C Hook     |  Yes            |
| 226 | 7mm (1.5 tonne) | 1 metre | C Hook     |  No             |
| 247 | 7mm (1.5 tonne) | 1 metre | Latch Hook |  No             |

我知道第2,4,6和8列(我想成为标题)中的值在所有行中都是相同的(但根据初始查询的不同而不同)。

我认为我想要的方法是通过使用PIVOT,但真的很难获得理想的结果。

由于

1 个答案:

答案 0 :(得分:1)

假设你的源数据实际上是这样的:

enter image description here

Static Pivot

Select *
From  YourTable
Pivot (max(attributeValue) For [attributeName] in ([Chain Size],[Length],[Hook Type],[Shortening Grab]) ) p

<强>返回

enter image description here

动态方法

Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName([attributeName]) From Yourtable  Order by 1 For XML Path('')),1,1,'') 
Select  @SQL = '
Select *
From YourTable
Pivot (max(attributeValue) For [attributeName] in (' + @SQL + ') ) p'
Exec(@SQL);

<强>返回

enter image description here

注意,如果没有列序列的项,您将看到它们是按字母顺序排列的。