Группировать по идентификатору для статуса заказа - PullRequest
0 голосов
/ 08 мая 2020
OrderId KId OrderStatus
1   2042    2
2   2042    2
3   2042    2
4   2042    2
5   2042    2
53  2152    2
7   2069    1
8   2042    2
9   2042    4
10  2042    1
24  2043    2

У меня есть таблица заказов с KitchenId как KId, OrderId и статусом. Я хочу сгруппировать эту таблицу для отображения отчета как KId, TotalOrders, Delivered, Accepted, Rejected на основе OrderStatus = 2 Accepted, 4 Delivered, 1 rejected

Мой желаемый результат, как показано ниже

KId    Total Order  Accepted Rejected Delivered 
2042     8           6          1         1 
2043     1           1          0         0   

Ответы [ 2 ]

3 голосов
/ 08 мая 2020

Попробуйте следующее. Вот демо .

select
    KId,
    count(KId) as total_orders,
    sum(case when OrderStatus = 2 then 1 else 0 end) as Accepted,
    sum(case when OrderStatus = 4 then 1 else 0 end) as Rejected,
    sum(case when OrderStatus = 1 then 1 else 0 end) as Delivered
from orders
group by
    KId

Вывод:

| KId  | total_orders | accepted | rejected | delivered |
| ---- | ------------ | -------- | -------- | --------- |
| 2042 | 8            | 6        | 1        | 1         |
| 2043 | 1            | 1        | 0        | 0         |
| 2069 | 1            | 0        | 0        | 1         |
| 2152 | 1            | 1        | 0        | 0         |
0 голосов
/ 08 мая 2020

Вы можете использовать условную агрегацию и подсчитывать отдельные, чтобы быть уверенным в подсчете порядка

    select KId
        , count(distinct orderId) total 
        , sum( when OrderStatus = 2 then 1 else 0 end) Accepted 
        , sum( when OrderStatus = 4 then 1 else 0 end) Delivered 
        , sum( when OrderStatus = 1 then 1 else 0 end) Rejected 
    from my_ttable  
    group by  KId 
...