SQL Запрос, чтобы получить счетчик статуса по другому статусу для того же идентификатора - PullRequest
1 голос
/ 09 апреля 2020

У меня есть таблица с записями, которые показывают шаги процесса:

    Status      | ModelID
-------------------------
    Set Remote  | 1
    Train       | 1
    Trained     | 1
    Enabled     | 1
    Set Local   | 2
    Train       | 2
    Trained     | 2
    Enabled     | 2
    Set Upload  | 3
    Train       | 3
    Trained     | 3
    Set Remote  | 4
    Train       | 4
    Trained     | 4
    Enabled     | 4

И я хочу получить следующий результат

     Status      | CountTrained | CountEnabled
-------------------------------------------------
     Set Remote  | 2            | 2
     Set Local   | 1            | 1
     Set Upload  | 1            | 0

Я пробовал следующий запрос

    select 
       sum(case when status = 'Set Local' then 1 else 0 end),
       sum(case when status = 'Set Remote' then 1 else 0 end),
       sum(case when status = 'Set Upload' then 1 else 0 end)
    from TABLE
    inner join (select 
                   distinct ModelId,
                   status  as ModelStatus
                from TABLE
                where (status = 'Trained' or status = 'Enabled')) as Model
    on Model.ModelId = TABLE.ModelId

Но этот запрос не возвращает нужные мне результаты.

Есть предложения о том, как мне достичь ожидаемых результатов?

1 Ответ

1 голос
/ 09 апреля 2020

Я думаю, что это то, что вы хотите:

select modelid,
       max(case when status like 'Set %' then status end) as status,
       sum(case when status = 'Trained' then 1 else 0 end) as trained,
       sum(case when status = 'Enabled' then 1 else 0 end) as enabled
from t
group by modelid;
...