2010-10-04 27 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