Транспонировать часть результатов SQL для консолидации записей - PullRequest
0 голосов
/ 19 января 2019

Я работаю над проектом, и он стал немного сложнее, чем я могу иметь дело.У меня есть кусок SQL, который внутренне объединяет несколько таблицОдна из этих таблиц возвращает средства связи для каждого человека (например, номер телефона, радиозвонок, пейджер).

После того, как я реализовал этот код, SQL (совершенно справедливо) возвращает несколько записей для каждого человека, в зависимости от того, какие поля связи они заполнили.Таким образом, поиск для меня вернул бы:

Name  |  COMM_VALUE    | COMM_RID
Nick  |  07123 456789  |   5
Nick  |  0965          |   6
Nick  |  328493        |   7

Где как мне нужно:

Name  |  Mobile        |   Radio    |  Pager
Nick  |  07123 456789  |   0965     |  328493
Bob   |  etc etc etc

Это часть таблицы гораздо большего размера, поэтому мой вопрос заключается в том, как добавить эти столбцы вмой существующий SQL, я посмотрел на вложенные, подзапросы и союзы, но с тех пор, как я сделал SQL, прошло много времени, и даже мой основной прогресс был в тестировании моих возможностей.

Я предполагаю что-то вроде следующего, но не уверен включевые слова, которые мне нужны для достижения этой цели:

Select
  PRP.FIRSTNAME + ‘ ‘ + PRP.SURNAME AS FULLNAME,
  RDP.POSTNAME,
  RRP.REMARKS,
  */ NEW COLUMNS */
      (SELECT COMM_VALUE FROM PERREC_COMMS WHERE COMM_RID = ‘6’) AS RADIO

Приведенный выше (отредактированный) код дает результаты, но не совсем так, как я ожидал:

Name  |  RADIO
Nick  |  0965
Nick  |  null
Nick  |  null

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

Как можно объединить эти результаты в одну строку (исключая результаты 'null')?

1 Ответ

0 голосов
/ 19 января 2019

Вы хотите изменить данные.Одним из методов является условная агрегация.Для этой цели я бы порекомендовал:

select name,
       group_concat(case when comm_rid = 5 then comm_value end) as what_5_means,
       group_concat(case when comm_rid = 6 then comm_value end) as radio,
       group_concat(case when comm_rid = 7 then comm_value end) as whateve_7_means
from . . .
group by name;

Я не знаю, какой вопрос использовать from.

Используется group_concat() вместо max() только вслучай, когда у кого-то есть несколько средств связи одного типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...