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

Posted

技术标签:

【中文标题】我的 PIVOT 返回重复行,每行中都有数据透视列值【英文标题】:My PIVOT is returning duplicate rows with pivot column values in each row 【发布时间】:2016-03-04 23:39:22 【问题描述】:

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

我的#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

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

【问题讨论】:

感谢@Ajmot 的格式化帮助!我无法在有限的所见即所得编辑器中看到如何以这种方式格式化。 【参考方案1】:

问题是由表的字段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

【讨论】:

我真的很好奇为什么将 * 解析为合格的字段名称会自动解决此问题?它来自 TSQL 内部吗?

以上是关于我的 PIVOT 返回重复行,每行中都有数据透视列值的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pivot 将行更改为列

在新列中显示行数据(透视?)

POWER PIVOT基础篇

在 SQL Server 2012 中使用 Pivot 函数将行数据更改为列

PIVOT 行列相转

如何获得解码/未透视行的唯一计数(列到行)