如何在SQL中转置表?

时间:2018-10-04 16:34:03

标签: sql string-aggregation

  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 :(得分:1)

我假设您为此使用sql-server,但是您可以修改查询以使其适用于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]行返回一行。

我建议您检出this post,以获取该查询的积分以及其他可能的答案解决方案。

答案 1 :(得分:1)

对于Postgres,您可以使用:

select a, string_agg(b::text, ',' order by b)
from the_table
group by a;