2011-12-22 56 views
3

我有一个包含每个事务类型的事务量的大表(数百万个recs)。我试图获得每个事务类型的COUNT,其中数量大于,小于和等于0.我正在执行3个单独的查询来获取此信息,更改每个中的WHERE子句,然后将结果一起分解之后。SQL Server 2008:使用SIGN获得正面或负面的价值

有人可以推荐一个更聪明的方式来写这句话吗?

SELECT 
TRANSACTION_CD 
,COUNT(TRANSACTION_CD) 
FROM [FINANCIAL_TRANSACTION] ft 
INNER JOIN POLICY p ON p.POLICY_ID = ft.POLICY_ID 
WHERE 
ft.EFFECTIVE_DT > '01/01/2008' 
AND SIGN(ft.transaction_amt) = -1 
GROUP BY 
TRANSACTION_CD 
ORDER BY 
TRANSACTION_CD 

回答

4
SELECT 
TRANSACTION_CD 
,SUM(CASE WHEN ft.transaction_amt < 0 THEN 1 ELSE 0 END) AS NegativeCount 
,SUM(CASE WHEN ft.transaction_amt = 0 THEN 1 ELSE 0 END) AS ZeroCount 
,SUM(CASE WHEN ft.transaction_amt > 0 THEN 1 ELSE 0 END) AS PositiveCount 
FROM [FINANCIAL_TRANSACTION] ft 
INNER JOIN POLICY p ON p.POLICY_ID = ft.POLICY_ID 
WHERE 
ft.EFFECTIVE_DT > '01/01/2008' 
GROUP BY 
TRANSACTION_CD 
ORDER BY 
TRANSACTION_CD 
+0

谢谢,我会尝试这一建议。 – knuckle05 2011-12-22 20:37:16