我是sql的新手
这是我的疑问:
select rmname, sum(cast (PROPOSEDLIMIT as int)) as january
from los_ext
where applicationdate between '01-01-2016' and '01-31-2016'
group by RMNAME
我想在单个查询中每个月使用此功能,而不必始终使用日期between function
。
我该怎么做?
我希望输出为:
RMNAME JAN FEB MARCH APRIL ....
Nitin 2222 3333 33333 34422 333
要求取出所提出的限额之和。
答案 0 :(得分:0)
尝试以下查询:
select
rmname,
sum(CASE WHEN MONTH(applicationDate) = 1 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as january,
sum(CASE WHEN MONTH(applicationDate) = 2 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as February,
sum(CASE WHEN MONTH(applicationDate) = 3 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as March,
sum(CASE WHEN MONTH(applicationDate) = 4 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as April,
sum(CASE WHEN MONTH(applicationDate) = 5 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as May,
sum(CASE WHEN MONTH(applicationDate) = 6 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as June,
sum(CASE WHEN MONTH(applicationDate) = 7 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as July,
sum(CASE WHEN MONTH(applicationDate) = 8 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as August,
sum(CASE WHEN MONTH(applicationDate) = 9 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as September,
sum(CASE WHEN MONTH(applicationDate) = 10 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as October,
sum(CASE WHEN MONTH(applicationDate) = 11 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as November,
sum(CASE WHEN MONTH(applicationDate) = 12 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as December
from los_ext
group by RMNAME,MONTH(applicationDate)
您可以在Pivot Table上收集一些知识。
注意:以上查询将总结相同月份的数据,但月份可能属于不同年份。
For example 2015 February and 2014 February will be summed up to the same slot.
为了避免这种情况,您可以添加date range in where clause like you did
。
因此,在查询的where子句中添加该日期范围如下所示:
select
rmname,
sum(CASE WHEN MONTH(applicationDate) = 1 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as january,
sum(CASE WHEN MONTH(applicationDate) = 2 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as February,
sum(CASE WHEN MONTH(applicationDate) = 3 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as March,
sum(CASE WHEN MONTH(applicationDate) = 4 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as April,
sum(CASE WHEN MONTH(applicationDate) = 5 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as May,
sum(CASE WHEN MONTH(applicationDate) = 6 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as June,
sum(CASE WHEN MONTH(applicationDate) = 7 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as July,
sum(CASE WHEN MONTH(applicationDate) = 8 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as August,
sum(CASE WHEN MONTH(applicationDate) = 9 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as September,
sum(CASE WHEN MONTH(applicationDate) = 10 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as October,
sum(CASE WHEN MONTH(applicationDate) = 11 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as November,
sum(CASE WHEN MONTH(applicationDate) = 12 THEN cast (PROPOSEDLIMIT as int) ELSE 0 END) as December
from los_ext
WHERE applicationdate between '01-01-2016' and '31-12-2016'
group by RMNAME,MONTH(applicationDate)
答案 1 :(得分:0)
在派生表中执行cast
和month
内容(以节省一些输入,并符合ANSI SQL标准。):
select rmname,
sum(case when mnth = 1 then proplim else 0 end) as jan,
sum(case when mnth = 2 then proplim else 0 end) as feb,
...
sum(case when mnth = 12 then proplim else 0 end) as dec
from
(
select rmname, cast (PROPOSEDLIMIT as int) proplim, MONTH(applicationDate) mnth
from los_ext
where applicationdate between '01-01-2016' and '01-31-2016'
) dt
group by RMNAME