#sql #sql-server #sql-server-2008
#sql #sql-сервер #sql-server-2008
Вопрос:
Я знаю, это может показаться немного странным, но у меня есть два вопроса
- общий итог столбца sum() — NetAmount
- чтобы иметь данные за два периода для сравнения — сумма 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