我的PIVOT返回每行中具有数据透视列值的重复行

时间:2015-12-01 06:16:06

标签: sql-server tsql stored-procedures pivot

我遇到了一个问题我见过有类似问题的其他人,但对那些人的答案似乎并不适用于我的情况。这是我的第一个问题,请原谅我提前解决任何格式问题,并感谢您提供的任何见解。

我的#TempTBData看起来像这样:

InvoiceProductID ContactID ContactName ChargeDescription Amount
191 1832    Gloria Cheung   Cruise Fare 500.00
191 1886    John Novosad    Cruise Fare 500.00
191 2011    Christopher Yong    Cruise Fare 100.00

我的透视代码如下所示:

SELECT DISTINCT<br>
      [InvoiceProductID]<br>
      ,[ChargeDescription]<br>
      ,[Christopher Yong],[Gloria Cheung],[John Novosad]<br>
      FROM #TempTBData<br>
          PIVOT(MAX([Amount])<br>
          FOR [ContactName] IN ([Christopher Yong],[Gloria Cheung],[John Novosad])) AS PVTTable

..我的PIVOT结果如下:

 InvoiceProductID ChargeDescription Christopher Yong Gloria Cheung John Novosad

    191 Cruise Fare NULL    NULL    500.00
    191 Cruise Fare NULL    500.00  NULL
    191 Cruise Fare 100.00  NULL    NULL

..我希望结果如下:

InvoiceProductID ChargeDescription Christopher Yong Gloria Cheung John Novosad
191 Cruise Fare 100.00  500.00  500.00

请让我知道我做错了什么。

1 个答案:

答案 0 :(得分:9)

问题是由您的表的字段ContactID引起的。请使用派生表,而只显式选择透视操作所需的字段:

SELECT [InvoiceProductID], [ChargeDescription],
       [Christopher Yong],[Gloria Cheung],[John Novosad]
FROM (
  SELECT [InvoiceProductID], [ContactName], [ChargeDescription], [Amount]
  FROM #TempTBData ) AS src
PIVOT(MAX([Amount])
FOR [ContactName] IN ([Christopher Yong],[Gloria Cheung],[John Novosad])) AS PVTTable

我省略了DISTINCT,因为在这种情况下似乎是多余的。

Demo here