SQL "Group" и "Count" категории - PullRequest
       43

SQL "Group" и "Count" категории

1 голос
/ 24 сентября 2019

Изменить.Это продолжение другого вопроса .Чтобы упростить вопрос.Предположим, таблица

date  | id | type
01/01 |  1 |  F
02/01 |  1 |  F
02/01 |  1 |  F
03/01 |  1 |  S
03/01 |  1 |  S
04/01 |  1 |  F
04/01 |  1 |  S
05/01 |  1 |  S

Я ищу способ суммировать приведенную выше таблицу по комбинации типов транзакций в день.Если у человека (id) есть только одна транзакция в день, это считается одним типом.Если они имеют более одного, он считается как несколько.Я сделал это с моим оригинальным запросом, и он работает.Вывод из приведенной выше таблицы будет:

date  | Single | Multiple
01/01 |   1    |   0
02/01 |   0    |   1
03/01 |   0    |   1
04/01 |   0    |   1
05/01 |   1    |   0

Я получил это далеко, и это работает.То, с чем я борюсь (т. Е. Понятия не имею, как начать), заключается в том, как настроить запрос, чтобы показать все возможные комбинации типа (SS, FF, FS) вместо простого подсчета нескольких транзакций.Желаемый результат будет выглядеть так:

date  | Single | # FF | # FS | # SS
01/01 |   1    |   0  |   0  |  0
02/01 |   0    |   1  |   0  |  0
03/01 |   0    |   0  |   0  |  1
04/01 |   0    |   0  |   1  |  0
05/01 |   1    |   0  |   0  |  0

Любые конструктивные подсказки или идеи будут высоко оценены.

1 Ответ

1 голос
/ 24 сентября 2019

это предполагает, что у вас есть максимум 2 types на дату.

Вы можете использовать оператор CASE WHEN с MIN() и MAX() для проверки комбинации FF, FS или SS

select  [date],
    case when count(*) = 1 then 1 else 0 end as Single,
    case when count(*) >= 2 
         and  min([type]) = 'F'
         and  max([type]) = 'F'
         then 1
         else 0
         end as [# FF],
    case when count(*) >= 2 
         and  min([type]) = 'F'
         and  max([type]) = 'S'
         then 1
         else 0
         end as [# FS],
    case when count(*) >= 2 
         and  min([type]) = 'S'
         and  max([type]) = 'S'
         then 1
         else 0
         end as [# SS]
from    yourtable
group by [date]

РЕДАКТИРОВАТЬ: для более чем 3 типов просто измените count(*) = 2 на count(*) >= 2, если type либо F, либо S

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...