три условия в случае - PullRequest
0 голосов
/ 30 мая 2018

У меня есть 2 условия в случае, когда, но результат не я хочу

вот мой код:

SELECT CASE WHEN count(b.id_canteen) < 2 and status = 'Active' THEN 'Available'
            ELSE 'Full' END as quota, 
       a.id_canteen, 
       name_canteen, 
       count(b.id_counter) as total 
from canteen_A a 
     join canteen_B b  on a.id_canteen=b.id_canteen 
group by a.id_canteen,
         name_canteen,
         status;

, и это результат

=================================================
|   quota   | id_canteen | name_canteen | total |
=================================================
| Available | Canteen01   | Canteen A   |   1   |
| Available | Canteen02   | Canteen B   |   1   |
| Full      | Canteen01   | Canteen A   |   1   |
=================================================

и результат, который я хочу, вот так

=================================================
|   quota   | id_canteen | name_canteen | total |
=================================================
| Available | Canteen01   | Canteen A   |   2   |
| Available | Canteen02   | Canteen B   |   1   |
=================================================

это статус поля

==============================
|   Status   |  id_canteen   |
==============================
| Not Active |   Canteen01   |
|   Active   |   Canteen01   |
|   Active   |   Canteen02   |
==============================

обновление: я хочу добавить счетчик условий (статус) активен <2.что мне делать? </p>

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

что это возвращает?

SELECT
      X.id_canteen, 
      X.name_canteen, 
      CASE
        WHEN X.total < 2 AND X.status = 'Active' THEN
          'Available'
        ELSE
          'Full'
      END quota
FROM
      (
        SELECT
              a.id_canteen, 
              a.name_canteen,
              b.status
              COUNT(b.id_counter) total 
          FROM
              canteen_A a 
            JOIN
              canteen_B b
                ON a.id_canteen = b.id_canteen
          GROUP BY
              a.id_canteen,
              a.name_canteen,
              b.status
        ) X
0 голосов
/ 30 мая 2018

Проблема в GROUP BY.Вы не хотите status в этом.Итак, я думаю:

select (case when count(b.id_canteen) < 2 and
                  sum(case when status = 'Active' then 1 else 0 end) > 0
             then 'Available' 
             else 'Full' 
         end) as quota, 
       a.id_canteen, name_canteen, 
       count(b.id_counter) as total 
from canteen_A a join
     canteen_B b 
     on a.id_canteen = b.id_canteen 
group by a.id_canteen, name_canteen
...