2011-12-22 62 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