Общий итог столбца sum и итог двух разных периодов

#sql #sql-server #sql-server-2008

#sql #sql-сервер #sql-server-2008

Вопрос:

Я знаю, это может показаться немного странным, но у меня есть два вопроса

  1. общий итог столбца sum() — NetAmount
  2. чтобы иметь данные за два периода для сравнения — сумма base_amount

мой запрос выглядит следующим образом

 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 года, возможно ли использовать NetAmount2013 в качестве следующего столбца за июнь 2013 года рядом в одном запросе?

Ответ №1:

Быстрый и простой способ сделать это заключается в следующем: вероятно, вам следует улучшить это, избегая жестко закодированных строк и вместо этого выполняя некоторые сравнения с функциями MONTH() and 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