SQL сгруппировать и выбрать с условием в каждом столбце - PullRequest
2 голосов
/ 14 февраля 2020

Я хочу выбрать таблицу, сгруппировать ее по подмножеству и сохранить только значения 'Y' для каждого столбца в каждой группе.
И замените значение 'Y' значением идентификатора первого столбца.

моя таблица выглядит так


ID      Date        MachineNo Operator1 Operator2 Operator3 Operator4 Reporter1 Reporter2 Reporter3 Reporter4
A57611  2019-01-02   5515         Y        N          N          N        N         N         Y         N
D75451  2019-01-02   5515         N        Y          N          N        N         Y         N         N
E10758  2019-01-02   5515         N        N          Y          N        Y         N         N         N
E41020  2019-01-02   5515         N        N          N          Y        N         N         N         Y
...
F20124  2019-01-02   5405         Y        N          N          N        N         N         Y         N
A45687  2019-01-02   5405         N        N          Y          N        N         Y         N         N
B22511  2019-01-02   5405         N        Y          N          N        Y         N         N         N
C45451  2019-01-02   5405         N        N          N          Y        N         N         N         Y
...

И я хочу выбрать таблицу, подобную этой:
Группа по дате и машинному номеру

Замените 'Y' на идентификатор каждой строки, и каждая группа объединится в одну строку


  Date      MachineNo Operator1 Operator2 Operator3 Operator4 Reporter1 Reporter2 Reporter3 Reporter4
2019-01-02    5515      A57611    D75451    E10758    E41020    E10758    D75451   A57611    E41020
2019-01-02    5405      F20124    B22511    A45687    C45451    B22511    A45687   F20124    C45451
...

Метод, который я могу себе представить сейчас, - это "присоединиться" несколько раз, но Мне интересно, есть ли лучший способ сделать это.

Примечание: «Y» появляется только один раз в каждой группе в столбцах операторов и репортеров.

1 Ответ

4 голосов
/ 14 февраля 2020

Вы можете сделать это с условным агрегированием, если вы group by date, machineno:

select date, machineno,
  max(case when operator1 = 'Y' then ID end) operator1,
  ...........................................................
  max(case when reporter1 = 'Y' then ID end) reporter1,
  ...........................................................
from tablename
group by date, machineno
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...