首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL总计pr组

SQL总计pr组
EN

Stack Overflow用户
提问于 2018-08-23 11:46:31
回答 2查看 37关注 0票数 1

我需要计算销售的总和“在过去6周内”公关周。从今天起我需要:

  • 从今天起一周后的销售总额。
  • 两周前的销售总额。
  • 3周前的销售总额。
  • ..。直到6周前。

我有以下查询:

代码语言:javascript
复制
select retailerid,stylenumber,size,length,
    case when date > dateadd(WEEK,-1,GETDATE()) then SUM(quantity) else 0 end as w_1,
    case when date > dateadd(WEEK,-2,GETDATE()) then SUM(quantity) else 0 end as w_2,
    case when date > dateadd(WEEK,-3,GETDATE()) then SUM(quantity) else 0 end as w_3,
    case when date > dateadd(WEEK,-4,GETDATE()) then SUM(quantity) else 0 end as w_4,
    case when date > dateadd(WEEK,-5,GETDATE()) then SUM(quantity) else 0 end as w_5,
    case when date > dateadd(WEEK,-6,GETDATE()) then SUM(quantity) else 0 end as w_6        
    from someSalesTable
    left join dimdate on datekey = fk_date
    group by retailerid,stylenumber,size,length

错误是“日期”不是在分组子句中,而是如何解决这个问题?

简单(但很难看)的修复方法是进行6个不同的查询:/,但我需要在一个结果中提供这些信息,因为它将与另一个CTE连接。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-23 11:49:48

您应该SUM()整个CASE WHEN表达式,而不仅仅是quantity

代码语言:javascript
复制
select retailerid,stylenumber,size,length,
    SUM(case when date > dateadd(WEEK,-1,GETDATE()) then (quantity) else 0 end) as w_1,
    SUM(case when date > dateadd(WEEK,-2,GETDATE()) then (quantity) else 0 end) as w_2,
    SUM(case when date > dateadd(WEEK,-3,GETDATE()) then (quantity) else 0 end) as w_3,
    SUM(case when date > dateadd(WEEK,-4,GETDATE()) then (quantity) else 0 end) as w_4,
    SUM(case when date > dateadd(WEEK,-5,GETDATE()) then (quantity) else 0 end) as w_5,
    SUM(case when date > dateadd(WEEK,-6,GETDATE()) then (quantity) else 0 end) as w_6        
    from someSalesTable
    left join dimdate on datekey = fk_date
    group by retailerid,stylenumber,size,length
票数 1
EN

Stack Overflow用户

发布于 2018-08-23 11:49:48

如果在使用GROUP BY子句时有条件,则date列应该处于聚合函数中:

代码语言:javascript
复制
select retailerid, stylenumber, size, length,
       sum(case when [date] > dateadd(WEEK, -1, GETDATE()) then quantity else 0 end) as w_1,
       . . .
from someSalesTable left join 
     dimdate 
     on datekey = fk_date
group by retailerid, stylenumber, size, length;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51985104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档