【问题标题】: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

【问题讨论】:

标签: sql pivot transpose


【解决方案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

【讨论】:

【解决方案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 的建议有效,那可能会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 2011-05-08
  • 2013-09-16
  • 2014-06-07
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多