Sql 总和栏总计和两个不同期间总计

Sql 总和栏总计和两个不同期间总计,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我知道这听起来有点奇怪,但我有两个问题要问 sum()列总计-NetAmount 有两个时期的数据进行比较-基本金额之和 我的问题如下 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.

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

  • sum()列总计-NetAmount
  • 有两个时期的数据进行比较-基本金额之和
  • 我的问题如下

    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月的下一列,并在单个查询中列出?

    快速简便的方法如下:您可能应该避免硬编码字符串,并与
    月份()和
    年份()进行一些比较,以改进这一点
    函数,但这将向您展示基本思想

    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