2009-11-24 88 views
4

給定一個SQL表總結在相同的SQL兩個條件表

Transactions 
    ID   INT 
    COMPANY_ID INT 
    STATUS  INT 

其中STATUS IN (0,1)表示自由交易和STATUS IN (2,3)表示計費交易,有什麼簡單的(我希望)ANSI SQL語句會告訴我,每COMPANY_ID ,可結算交易的數量,不可結算交易的數量及其比率?

如果不是特定的說法,正確的方向概念刺激是好的。我的第一次嘗試是用WHERE子句爲這兩個狀態組自動加入表格,但我被困在如何獲得代表每個不同計數的列,以便我可以計算比率。

這在概念上與summarize-aggregated-data非常相似,但我不確定如何將此問題擴展到此問題。

回答

5

這是一個開始,我認爲這是沿着正確的路線......唯一剩下的就是添加比例。

SELECT 
    COMPANY_ID, 
    NON_BILLABLE = SUM(CASE STATUS WHEN IN (0, 1) THEN 1 ELSE 0 END), 
    BILLABLE = SUM(CASE STATUS WHEN IN (2, 3) THEN 1 ELSE 0 END) 
FROM TRANSACTIONS 
GROUP BY COMPANY_ID 

編輯:用於標準符合性。

SELECT 
    COMPANY_ID, 
    SUM(CASE STATUS WHEN IN (0, 1) THEN 1 ELSE 0 END) AS NON_BILLABLE, 
    SUM(CASE STATUS WHEN IN (2, 3) THEN 1 ELSE 0 END) AS BILLABLE 
FROM TRANSACTIONS 
GROUP BY COMPANY_ID 
+0

我猜SUM(CASE ... END)AS BILLABLE更符合標準。 – Dmitry 2009-11-24 00:43:04

+0

啊,謝謝。我是一個T-SQL傢伙。我的錯。 – 2009-11-24 00:46:11

+0

感謝您的啓動。我明天一進去就會嘗試一下。 – 2009-11-24 01:32:51