将结果集中的列结果转置为行

Posted

技术标签:

【中文标题】将结果集中的列结果转置为行【英文标题】:Transpose column result in resultset to rows 【发布时间】:2011-10-25 00:22:24 【问题描述】:

我有一个这样的结果集

Continent   Country
------- -------
Asia    Japan
Asia    Russia
Asia    India
Europe  Britain
Europe  France

来自查询

select continent,country from tablexxx

我想要格式的结果

Continent   Country
------- -------
Asia    Japan,Russia,India
Europe  Britain,France

我听说过数据透视表。但对我来说似乎很难...... 有关查询的任何帮助:)

这是我在 SQL Server 中的最终解决方案,它可以工作...:)

SELECT     continents, Countries = replace
                          ((SELECT Countries AS [data()]
                              FROM tblXXX
                              WHERE  continents = a.continents
                              ORDER BY continents FOR xml path('')), ' ',  ',' )
FROM       tblXXXa
WHERE     continents IS NOT NULL
GROUP BY continents

【问题讨论】:

您使用的是什么 RDBMS 和版本? 对于 mysql 看到这个问题***.com/questions/4561650/… 【参考方案1】:

如果你使用 MySQL,你需要使用 GROUP_CONCAT

例子:

SELECT continent, GROUP_CONCAT(county ORDER BY country) as Countries 
FROM tablexxx
GROUP BY continent
ORDER BY continent

链接http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

【讨论】:

非常感谢...在这里找到我的答案***.com/questions/451415/…【参考方案2】:

您可以使用 COALESCE 函数从行构建以逗号分隔的列表,如下例所示:

DECLARE @EmployeeList varchar(100)

SELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') + 
   CAST(Emp_UniqueID AS varchar(5))
FROM SalesCallsEmployees
WHERE SalCal_UniqueID = 1

SELECT @EmployeeList

【讨论】:

这行不通,除非作为过程代码中的构建块,但实际上不是 SQL。 我想为此编写一个查询,不使用任何变量 您可以将概念放入 UDF 中。这就是我所做的。如果@Johan 的建议有效,那可能会更好。

以上是关于将结果集中的列结果转置为行的主要内容,如果未能解决你的问题,请参考以下文章

SQL 将多列转置为行

Oracle:将列转置为行

将 QUERY 结果的 GROUPS 组转置为单列

将列转置为行 SQL Server

用SQL对经过排名的结果集进行转置

用SQL对经过排名的结果集进行转置