pivot表为同一个ID返回多行

时间:2016-06-07 15:12:40

标签: sql sql-server tsql

我有一个我用来做数据透视的sql代码。代码如下:

SELECT DISTINCT PersonID
,MAX(pivotColumn1)
,MAX(pivotColumn2) --originally these were in 2 separate rows)
FROM(SELECT srcID, PersonID, detailCode, detailValue) FROM src) AS SrcTbl
PIVOT(MAX(detailValue) FOR detailCode IN ([pivotColumn1],[pivotColumn2])) pvt
GROUP BY PersonID

在源数据中,由于具有用于分隔值的自己的ID,因此ID具有2个单独的行。我现在已经转了它,它仍然给我2个单独的行ID,即使我将它分组并在枢轴列上使用聚合。你觉得这个代码错了吗?

所以我在IN子句中列出了所有可能的detailCode。所以当值为none时我返回null,但我希望它总结为1行。见下图。

enter image description here

1 个答案:

答案 0 :(得分:1)

如果这些是detailCode的所有选项,则可以使用CASE EXPRESSION代替Pivot的条件聚合:

SELECT t.personID,
       MAX(CASE WHEN t.detailCode = 'cas' then t.detailValue END) as cas,
       MAX(CASE WHEN t.detailCode = 'buy' then t.detailValue END) as buy,
       MAX(CASE WHEN t.detailCode = 'sel' then t.detailValue END) as sel,
       MAX(CASE WHEN t.detailCode = 'pla' then t.detailValue END) as pla
FROM YourTable t
GROUP BY t.personID