запрос на присоединение к MySQL

0

У меня есть запрос со следующими таблицами (сокращенными, чтобы показывать только интересующие столбцы).

t1
code

t2
code, period, status

t3
period, desc

Теперь у меня есть,

t3 - таблица уникальных "периодов".

t1 - таблица уникальных кодов.

t2 - таблица соединений, связывающая вместе вместе со статусом для этого примера status = (A, B, C).

Что я делаю, это создать результат запроса, который сгруппирован по "периоду" и имеет количество "кодов" в каждом статусе.

Это легко решить, но хочу, чтобы я хотел его расширить, состоит в том, чтобы иметь не только количество "кода" в A, B и C, но и количество кодов, которые НЕ СВЯЗАННЫ с периодом или другими словами, счетчик кодов, не находящихся в t2 за данный период.

Итак, результат, который я ищу, -

Period    A    B    C   (Codes from t1 not found in t2)
P1        10   5    2   3
P2        5    5    5   10
Теги:
pivot

1 ответ

1
Лучший ответ

Вы можете использовать кросс-соединение, чтобы выбрать матрицу всех кодов для всех периодов. Это позволяет вам подсчитывать строки, которые нет:

select
    sum(case when t2.status is 'A' then 1 else 0 end) as ACount,
    sum(case when t2.status is 'B' then 1 else 0 end) as BCount,
    ...
    sum(case when t2.code is null then 1 else 0 end) as NotPresentCount
from       t1
cross join t3
left join  t2 
on         t2.code = t1.code and t2.period = t3.period
group by   t3.period
  • 0
    Точно хочу, чтобы я был после. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню