2010-10-04 56 views
1

冰雹同胞程序員和查詢作家,樓梯行爲與擺動數據

我有這個美麗的查詢

SELECT ID, [1] AS coL1, [15] AS coL2, [2] AS coL3, [16] AS coL4, [12] AS coL5 
FROM MY_TABLE 
PIVOT (sum(INT_VALUE) FOR FUND_CODE IN ([1],[2],[15],[16],[12])) AS p 
--GROUP BY ID, [1] , [15] , [2] , [16] , [12] 
ORDER BY ID ASC 

返回我的數據是這樣的:

10001  182  NULL  NULL  NULL 
10001  NULL  81  NULL  NULL 
10001  NULL  NULL  182  NULL 
10001  NULL  NULL  NULL  81 
10002  165  NULL  NULL  NULL 
10002  NULL  73  NULL  NULL 
10002  NULL  NULL  165  NULL 
10002  NULL  NULL  NULL  73 

的10001 10002是兩個主鍵,我想顯示我的數據是這樣的:

10001  182  81  182  81 
10002  165  73  165  73 

我試過這個評論GROUP BY無濟於事。 任何提示?它涉及COALESCE嗎?

+0

我相信這個網站有答案,但我看不到光。 「http://blogs.msdn.com/b/craigfr/archive/2007/07/03/the-pivot-operator.aspx」。 – 2010-10-04 14:16:44

+1

你用什麼邏輯來確定col1的值182是col2的值是81而不是73? – 2010-10-04 14:24:51

+0

在你的例子中,因爲它目前,10001 **不是* *主鍵 - 有兩行。可能的主鍵應該是ID,加上其他一些列? – 2010-10-04 15:00:35

回答

0

萬一...

SELECT ID, 
SUM(CASE WHEN FUND_CODE = 1 THEN VR_MOVIMENTACAO_QUOTA ELSE 0 END) coL1, 
SUM(CASE WHEN FUND_CODE = 15 THEN VR_MOVIMENTACAO_QUOTA ELSE 0 END) coL2, 
SUM(CASE WHEN FUND_CODE = 2 THEN VR_MOVIMENTACAO_QUOTA ELSE 0 END) coL3, 
SUM(CASE WHEN FUND_CODE = 16 THEN VR_MOVIMENTACAO_QUOTA ELSE 0 END) coL4, 
SUM(CASE WHEN FUND_CODE = 12 THEN VR_MOVIMENTACAO_QUOTA ELSE 0 END) coL5 

FROM MY_TABLE 
GROUP BY ID 
2

SELECT ID ,SUM(1)AS 'COL1' ,SUM(15)AS 'COL2' ,SUM(2)AS 'COL3' ,SUM(16)AS'col4' ,SUM(12)AS'col5' FROM表GROUP BY ID

+0

謝謝,DOC,但我放棄了PIVOT以支持CASE,就像您看到的那樣: – 2010-10-08 13:33:46