SQL запрос, чтобы получить результат, как показано ниже - PullRequest
0 голосов
/ 10 февраля 2020
id   name   Content
 1   abc    khsdchdcdhkj
 1   abc    kjwdfwvkkvj
 1   abc    poiwejefoefoen
 2   def    oiwejfioweocwnf
 2   def    liweenfowejnvouer
 2   def    oiewjvoivoewfoiff
 3   ghi    oljevnjoernvjeno
 3   ghi    oinrevoinewovoewfio
 3   ghi    oljewnfjewnfjwenfjef
 4   xyz    ojnwefojnweuofoioinvc
 4   xyz    kjnwefjonwefojoojn
 4   xyz    oijdofijweoifjoijiojwfvn

для преобразования, как показано ниже:

Результат должен быть таким

id   name   Content1       Content2              Content 3
 1   abc    khsdchdcdhkj    kjwdfwvkkvj           poiwejefoefoen
 2   def    oiwejfioweocwnf liweenfowejnvouer     oiewjvoivoewfoiff

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Вы можете получить это, используя GROUP_CONCAT() и SUBSTRING_INDEX()

SELECT id,
       name,
       SUBSTRING_INDEX(GROUP_CONCAT(Content ORDER BY Content), ',', 1) AS Content1,
       SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(Content ORDER BY Content), ',', 2), ',', -1) AS Content2,
       SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(Content ORDER BY Content), ',', 3), ',', -1) AS Content3
FROM table_name
GROUP BY id, name;

Если существует более 3 значений, вы просто добавили бы еще один SELECT и увеличили число во внутреннем SUBSTRING_INDEX(), например: SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(Content ORDER BY Content), ',', 4), ',', -1) AS Content4

0 голосов
/ 10 февраля 2020

Вы можете использовать условное агрегирование и row_number():

select id,
       max(case when seqnum = 1 then content end) as content1,
       max(case when seqnum = 2 then content end) as content2,
       max(case when seqnum = 3 then content end) as content3
from (select t.*, 
             row_number() over (partition by id order by content) as seqnum
      from t
     ) t
group by id

Примечание: SQL таблицы представляют неупорядоченные наборы. Таким образом, порядок трех столбцов составляет content. Если вы хотите еще один заказ, то вам нужно иметь информацию о желаемом заказе в столбце.

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