2009-11-24 4 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 

EDIT: соответствие стандартам.

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

Я думаю, СУММА (CASE ... END) AS BILLABLE более соответствует стандартам. – Dmitry

+0

А, спасибо. Я парень T-SQL. Виноват. –

+0

Спасибо за это начало. Я попробую, как только я получу завтра. –

Смежные вопросы