2015-08-11 2 views
1

Итак, я пытаюсь вернуть 12 месяцев данных из billing_monthly_verizon_charges_detail_archive, и я не могу найти способ сделать, чтобы вернуть 0s, когда нет данных без удаления состояние verizon.ITEM_DESCRIPTION <> 'Payment Received'. Я понимаю, почему он не возвращает никаких данных, но как я могу заставить его возвращать 0 за каждый из месяцев invoice_date table с условным - что необходимо для тех случаев, когда есть данные.Возврат результатов на правой стороне Присоединиться к пустой таблице с где condtion

SELECT 'H. Verizon' AS category, CONVERT(VARCHAR(7), id.INVOICE_DATE, 111) AS invoice_date, ISNULL(SUM(verizon.COST), 0.00) AS total_charges 
FROM BILLING_MONTHLY_VERIZON_CHARGES_DETAIL_ARCHIVE AS verizon 
RIGHT OUTER JOIN 
INVOICE_DATES AS id ON verizon.BILL_CYCLE_DATE = id.INVOICE_DATE 
WHERE(id.INVOICE_DATE BETWEEN @BillingMonthMinus13 AND @BillingMonth) AND (verizon.ITEM_DESCRIPTION <> 'Payment Received') 
GROUP BY id.INVOICE_DATE 
+0

http://wiki.lessthandot.com/index.php/WHERE_conditions_on_a_LEFT_JOIN – HLGEM

ответ

0
COALESCE(verizon.ITEM_DESCRIPTION,'') <> 'Payment Received' 
0

считают:

SELECT 
    'H. Verizon' AS category, 
    CONVERT(VARCHAR(7), INVOICE_DATE,111) AS invoice_date, 
    ISNULL(SUM(COST), 0.00) AS total_charges 
FROM 
    (SELECT 
     INVOICE_DATE 
    FROM 
     INVOICE_DATES 
    WHERE 
     INVOICE_DATE BETWEEN @BillingMonthMinus13 AND @BillingMonth) id LEFT OUTER JOIN 
    (SELECT 
     BILL_CYCLE_DATE, 
     COST 
    FROM 
     BILLING_MONTHLY_VERIZON_CHARGES_DETAIL_ARCHIVE 
    WHERE 
     ITEM_DESCRIPTION <> 'Payment Received' ) verizon ON 
    BILL_CYCLE_DATE = INVOICE_DATE 
GROUP BY 
    INVOICE_DATE