Как получить условную сумму? - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь получить условную сумму на основе другого столбца. Например, предположим, что у меня есть этот набор данных:

ID  Date    Type    Total
-----------------------
5   12/16/2019  0   7
5   12/16/2019  1   0
5   12/17/2019  0   7
5   12/17/2019  1   7
5   12/18/2019  0   7
5   12/18/2019  1   0
5   12/19/2019  0   7
5   12/19/2019  1   7
5   12/20/2019  0   7
5   12/20/2019  1   7
5   12/23/2019  0   7
5   12/24/2019  0   7
5   12/25/2019  0   7
5   12/26/2019  0   7
5   12/27/2019  0   7

Если есть тип 1, тогда я хочу, чтобы эти данные были только для этих данных, иначе, если есть только 0, тогда я хочу, чтобы эти данные были на эту дату.

Таким образом, для 16.12.2009 я бы хотел значение 0. Для 23.12.2009 - 27.12.2009 я бы хотел значение 7.

Ответы [ 3 ]

1 голос
/ 07 января 2020

Вы можете использовать row_number():

select t.*
from (select t.*, row_number() over (partition by id, date order by type desc) as seq
      from table t
     ) t
where seq = 1;
0 голосов
/ 07 января 2020

Вы можете сделать это с помощью простого агрегирования. , , хорошо, и case:

select id, date, max(type),
       coalesce(max(case when type = 1 then total end),
                max(total)
               ) as total
from t
group by id, date;

Эта формулировка предполагает, что у вас есть только типы 0 и 1 и самое большее один из каждого типа в каждый день для данного id.

0 голосов
/ 07 января 2020

Простой ROW_NUMBER может справиться с этим довольно легко. Я изменил некоторые имена столбцов, потому что зарезервированные слова просто больно работать.

declare @Something table
(
    ID int
    , SomeDate Date
    , MyType int
    , Total int
)

insert @Something values
(5, '12/16/2019', 0, 7)
, (5, '12/16/2019', 1, 0)
, (5, '12/17/2019', 0, 7)
, (5, '12/17/2019', 1, 7)
, (5, '12/18/2019', 0, 7)
, (5, '12/18/2019', 1, 0)
, (5, '12/19/2019', 0, 7)
, (5, '12/19/2019', 1, 7)
, (5, '12/20/2019', 0, 7)
, (5, '12/20/2019', 1, 7)
, (5, '12/23/2019', 0, 7)
, (5, '12/24/2019', 0, 7)
, (5, '12/25/2019', 0, 7)
, (5, '12/26/2019', 0, 7)
, (5, '12/27/2019', 0, 7)

select ID
    , SomeDate
    , MyType
    , Total
from
(
    select *
        , RowNum = ROW_NUMBER()over(partition by SomeDate order by MyType)
    from @Something
) x
where x.RowNum = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...