2016-03-03 63 views
-1

我真的很新的sql数据(RS的总和)为多个月每月不同势

这是我的查询:

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 

我想这对于单个查询每月不使用日期永远都不会有。

我该怎么做?

我希望我的输出:

RMNAME JAN FEB MARCH APRIL .... 
Nitin 2222 3333 33333 34422 333 

其中propsed限制和被取出。

+1

哪个'RDBMS'实际上使用了? 'MySQL'或'SQL Server'? – 1000111

+0

添加一些示例数据plz – TheGameiswar

回答

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子句查询看起来象下面这样:(节省一些打字,并成为ANSI SQL标准)

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) 
0

执行castmonth东西在派生表:

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