Как транспонировать таблицу в sql? - PullRequest
0 голосов
/ 04 октября 2018
  a    | b     |
+------+-------+
| 1    | a,b,c |
| 1    | d,e,f |
| 1    | g,h   |
+------+-------+

Я хотел бы вывод, как показано ниже, с помощью сценария sql

1, a, b, c, d, e, f, g, h

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Для Postgres вы можете использовать:

select a, string_agg(b::text, ',' order by b)
from the_table
group by a;
0 голосов
/ 04 октября 2018

Я предполагаю, что вы используете sql-сервер для этого, но вы можете изменить запрос для работы с MySQL.

Этот запрос немного сложен, но вы можете использовать аргумент STUFF для объединенияструны.Он будет выглядеть как запрос, подобный следующему:

SELECT 
[a],
  STUFF((
    SELECT ', ' + [b]
    FROM #YourTable 
    WHERE (a = 1) 
    FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
    ,1,2,'') AS NameValues
FROM #YourTable Results
GROUP BY [a]

По сути, вы используете аргумент STUFF для перебора строк, где a = 1 в вашей таблице, и объединения их с запятой и пробелом вмежду каждым значением для столбца [b].Затем вы группируете их по столбцу [a], чтобы предотвратить возврат одной строки для каждой исходной строки [a] в таблице.

Я рекомендую вам проверить этот пост на кредитына запрос и другие возможные решения вашего ответа.

...