2016-06-07 90 views
1

我有一個用於執行數據透視的sql代碼。代碼如下:數據透視表爲同一個ID返回多於1行

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具有2個獨立的行由於其自身的ID分開的值。我現在已經旋轉了它,它仍然給我2個單獨的行ID,即使我將它分組並在透視列上使用聚合。艾想法最新代碼錯了什麼?

所以我有我所有的可能detailCode列在IN條款。所以我沒有返回null時,值是沒有,但我希望它全部彙總在1行。見下圖。

enter image description here

+0

樣本數據和預期的結果,請 –

+1

要麼使用'pivot'或使用'group by',但不能同時使用。如果使用'pivot',則應該消除子查詢中使兩行看起來不同的列。 –

回答

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 
+0

但有一些情況下,超過2行,因此我問這個問題。對不起應該已經清除了,當我發佈問題 – Faiz

+0

是的,你應該已經發布數據示例.. @Faiz – sagi

+0

@Faiz更新了答案,這應該現在工作。 – sagi