SQL - сумма и регистр - PullRequest
       14

SQL - сумма и регистр

0 голосов
/ 01 апреля 2020

Мне нужно получить сумму столбца, который называется 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

Я что-то упускаю или в этом случае какой лучший способ go?

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Что я понимаю, так это то, что Weekraw уже является цифрой, поскольку вы сравниваете с номерами недель.

Вы можете просто go для CASE logi c с условием IN.

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
0 голосов
/ 01 апреля 2020

Если вы имеете в виду, что запрос выдает ошибку, может случиться так, что поле 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 

Надеюсь, это поможет.

...