SQL具有相同行名的多行到列

时间:2016-05-05 17:24:02

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

我在SQL中有以下数据(nvarchar,nvarchar)

Name: Test Person 
Phone Number: 290831283
Fax Number: 192389182 
Email Address: test@test.com 
Name: Abacus Testing 
Phone Number: 901823908 
Fax Number: 9213989182 
Email Address: abacus@test.com

如何将此数据格式化为:

[Name] [Phone Number] [Fax Number] [Email Address]
Test Person 290831283 192389182 test@test.com 
Abacus Testing 901823908 9213989182 abacus@test.com

所以基本上将行设置为匹配列

我希望使用Pivot表,但由于聚合,我只得到第一行。

SELECT [Name], [Phone Number], [Fax Number], [Email Address]
FROM
(
    SELECT 
            ColumnName,
            Data
    FROM 
            TheData
) SRC
PIVOT
(
  MAX(Data)
  FOR ColumnName IN ([Name], [Phone Number], [Fax Number], [Email Address])
) PIV

我不希望使用CURSOR方法,任何替代方案?

  • 编辑:添加了其他可供使用的字段

其他可用字段是每个条目的标签ID。即Name = 1,PhoneNumber = 2,FaxNumber = 3,EmailAddress = 4

也可以使用4个条目中的每个条目的公共ID。即前4个条目的id为1001,后4个条目的id为1002

1 个答案:

答案 0 :(得分:1)

在评论中进行说明后,您只需将CommonId添加到您的来源。

这不是聚合列或扩展列,因此它将用作分组列,每个不同的值都会得到一行。

SELECT [Name], [Phone Number], [Fax Number], [Email Address]
FROM
(
    SELECT 
            CommonId,
            ColumnName,
            Data
    FROM 
            TheData
) SRC
PIVOT
(
  MAX(Data)
  FOR ColumnName IN ([Name], [Phone Number], [Fax Number], [Email Address])
) PIV