如果在按月数据执行分组时没有记录,如何返回零值记录

时间:2014-11-12 20:15:42

标签: sql-server tsql

我正在尝试创建显示12个月数据的客户报告。有一个Billing_Month字段,始终设置为该月的第一天,例如14年10月1日。有些客户并不总是每个月都有数据,但我需要在这几个月内返回零值。

我认为我很接近,但它的效果还不太好。有人能告诉我我做错了吗?

SELECT Sum(a.price) AS price, 
       Master_Account_Name, 
       b.Billing_Month 
FROM   tblbilling_detail_ec2 a 
       LEFT JOIN tblbilling_detail_ec2 b 
              ON a.ID = b.ID 
WHERE  master_account_name = 'TestCustomer' 
       AND b.billing_month BETWEEN Dateadd(yy, -1, '11/1/14') AND 
                                   Dateadd(m, -1, '11/1/14') 
GROUP  BY b.Billing_Month, 
          Master_Account_Name 

1 个答案:

答案 0 :(得分:0)

如果所有客户都需要退货,无论是否有活动,那么您可以使用客户表作为基表,或者您可以对客户表进行OUTER加入以确保抓住所有客户。

SELECT Sum(a.price) AS price, 
       cust.Master_Account_Name, 
       b.Billing_Month 
FROM   tblbilling_detail_ec2 a 
       LEFT JOIN tblbilling_detail_ec2 b 
              ON a.ID = b.ID 
       LEFT OUTER JOIN cust on a.master_account_name = cust.master_account_name
WHERE  a.master_account_name = 'TestCustomer' 
       AND b.billing_month BETWEEN Dateadd(yy, -1, '11/1/14') AND 
                                   Dateadd(m, -1, '11/1/14') 
GROUP  BY b.Billing_Month, 
      Master_Account_Name