每个月的多个月的数据(rs的总和)不同

时间:2016-03-03 09:14:57

标签: mysql sql sql-server-2008

我是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

要求取出所提出的限额之和。

2 个答案:

答案 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)

在派生表中执行castmonth内容(以节省一些输入,并符合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