总和列总数和两个不同时期总计

时间:2014-06-30 09:27:44

标签: sql sql-server sql-server-2008

我知道这听起来有点奇怪,但我有两个问题要问

  1. sum()列的总计 - NetAmount
  2. 有两个用于比较的期间数据 - base_amount的总和
  3. 我的查询如下:

    select a.usage_id BillingGroup, a.usage_desc BGDesc, sum(a.base_amount) NetAmount
    from cdi_item_dtl a, cdi_invoice_hdr b
    where a.tran_type = 'RM_CMI'
    and a.tran_no = b.tran_no
    and b.tran_date between '2014-06-01 00:00:00.000' and '2014-06-30 00:00:00.000'
    group by a.usage_id, a.usage_desc
    order by a.usage_id
    

    这给了我在NetAmount的所有组的总数,我想要总计NetAmount 这个查询显示2014年6月期间的第二点,是否可以将NetAmount2013作为单个查询旁边的2013年6月的下一列?

1 个答案:

答案 0 :(得分:1)

快速简便的方法如下:您应该通过避免使用硬编码字符串并对MONTH()YEAR()函数进行一些比较来改进这一点,但这会告诉您基本理念。

select 
    a.usage_id BillingGroup, 
    a.usage_desc BGDesc, 
    sum(CASE WHEN b.tran_date between '2014-06-01 00:00:00.000' and '2014-06-30 00:00:00.000' THEN a.base_amount ELSE 0 END) NetAmount2014,
    sum(CASE WHEN b.tran_date between '2013-06-01 00:00:00.000' and '2013-06-30 00:00:00.000' THEN a.base_amount ELSE 0 END) NetAmount2013
from cdi_item_dtl a, cdi_invoice_hdr b
where 
    a.tran_type = 'RM_CMI'
    and a.tran_no = b.tran_no
    and 
      (
        b.tran_date between '2014-06-01 00:00:00.000' and '2014-06-30 00:00:00.000'
        OR b.tran_date between '2013-06-01 00:00:00.000' and '2013-06-30 00:00:00.000'
      )
group by a.usage_id, a.usage_desc
order by a.usage_id