【问题标题】:Data (sum of rs)for multiple months for each month diffrent每个月不同的多个月的数据(rs 总和)
【发布时间】:2016-03-03 09:14:56
【问题描述】:

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

要取出所提出的限制的总和。

【问题讨论】:

  • 您实际使用的是哪个RDBMSMySQLSQL Server?
  • 请添加一些示例数据

标签: mysql sql sql-server-2008


【解决方案1】:

尝试以下查询:

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)

【讨论】:

    【解决方案2】:

    在派生表中执行 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  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 2023-03-17
      相关资源
      最近更新 更多