将结果集中的列结果转置为行
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 的建议有效,那可能会更好。以上是关于将结果集中的列结果转置为行的主要内容,如果未能解决你的问题,请参考以下文章