【问题标题】:SQL - Sum and Case functionSQL - Sum 和 Case 函数
【发布时间】:2020-04-01 00:09:01
【问题描述】:

我需要得到一个名为 prodflag 的列的总和,它只有 1 和 0。但棘手的部分是我需要在 4 周的桶中得到总和,所以像这样:

  1. 第一个桶:第 14、13、12、11 周
  2. 第二个桶:第 10,9,8,7 周
  3. 第三桶:第 6,5,4,3 周
select
      person
    , sup
    , program
    , city
    , sum( case when weekraw between DATEPART(WEEK,DATEADD(WEEK, -3, GETDATE()))  and  DATEPART(WEEK, GETDATE()) then prodflag else 0 end) firstbucket
    , sum( case when weekraw between DATEPART(WEEK,DATEADD(WEEK, -6, GETDATE()))  and  DATEPART(WEEK,-3, GETDATE()) then prodflag else 0 end) secondbucket
    , sum( case when weekraw between DATEPART(WEEK,DATEADD(WEEK, -9, GETDATE()))  and  DATEPART(WEEK,-6, GETDATE()) then prodflag else 0 end) thirdbucket    
from final
group by 
      person
    , sup
    , program
    , city

但是我认为与大小写相结合的总和不起作用,因为当我尝试让这部分代码工作时,它给了我一个错误:

, sum(
        case when weekraw between DATEPART(WEEK,DATEADD(WEEK, -6, GETDATE()))  and  DATEPART(WEEK,-3, GETDATE()) then prodflag else 0 end) secondbucket

我错过了一些东西,或者在这种情况下最好的方法是什么?

【问题讨论】:

  • 抱歉标签错了,我会删除它
  • 错误是什么?您的数据是什么样的?

标签: sql sql-server database sum case


【解决方案1】:

如果您的意思是查询抛出错误,则可能是该字段 weekraw 不是类型编号或包含 null 值。如果您的意思是它为您提供了一个您没有预料到的值,这可能是因为减法中的值:

, sum( case when weekraw between DATEPART(WEEK,DATEADD(WEEK, -3, GETDATE()))  and  DATEPART(WEEK, GETDATE()) then prodflag else 0 end) firstbucket
, sum( case when weekraw between DATEPART(WEEK,DATEADD(WEEK, -7, GETDATE()))  and  DATEPART(WEEK,-4, GETDATE()) then prodflag else 0 end) secondbucket
, sum( case when weekraw between DATEPART(WEEK,DATEADD(WEEK, -11, GETDATE()))  and  DATEPART(WEEK,-8, GETDATE()) then prodflag else 0 end) thirdbucket 

希望对你有帮助。

【讨论】:

    【解决方案2】:

    据我了解,Weekraw 已经是一个数字,因为您正在与 weeknumbers 进行比较。

    您可以简单地使用带有 IN 条件的 CASE 逻辑。

    select
          person
        , sup
        , program
        , city
        , sum( case when weekraw in (11,12,13,14) then prodflag else 0 end) AS firstbucket
        , sum( case when weekraw in (10,9,8,7) then prodflag else 0 end) AS secondbucket
        , sum( case when weekraw in (6,5,4,3) then prodflag else 0 end) AS thirdbucket
    from final
    group by 
          person
        , sup
        , program
        , city
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 2014-02-24
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多