【问题标题】:Group columns into multiple rows and Group_concate like MySQL in SQL Server将列分组为多行并像 SQL Server 中的 MySQL 一样进行 Group_concate
【发布时间】:2012-08-11 07:04:21
【问题描述】:

我一直在寻找一种在多行、一个单元格中显示一列的方法。它的内容用逗号分隔。

例如,代替:

ProjectID 名称计数 ------------------------------------- 2 技术服务 31 1 安全服务 32 7 技术服务 32

我希望我的查询结果如下所示:

名称标签 -------------------------- 技术服务 31,2 技术服务 32,7 安全服务 32,1

我还希望我的查询结果如下所示:(如 MySQL 中的 Group_Concate

名称标签 ------------------------------------------- 安全服务 32,1 技术服务 31,2: 32,7

【问题讨论】:

  • 请正确格式化。很难理解你在找什么

标签: sql sql-server sql-server-2008 sql-server-2005


【解决方案1】:

试试这个:

SELECT  Name, 
CAST(count AS VARCHAR(10)) + ',' + CAST(ProjectID AS VARCHAR(10))
AS Label FROM table1

结果

名称标签 ---------------------------- 安全服务 32,1 技术服务 32,7 技术服务 31,2

See this SQLFiddle

如果您想按Name (类似于 MySQL 中的 Group_Concate)进行分组,SQL Server 中没有任何方法。这只是其背后的逻辑。
所以试试这个:

SELECT  * FROM    (
    SELECT  DISTINCT Name
    FROM    table1
    ) table2
CROSS APPLY
    (SELECT  CASE ROW_NUMBER() 
      OVER(ORDER BY ProjectId) 
      WHEN 1 THEN '' ELSE ': ' END + 
      (CAST(table3.count AS VARCHAR(10)) + ',' 
      + CAST(table3.ProjectID AS VARCHAR(10)) )
    FROM    table1 table3
    WHERE   table3.Name = table2.Name
    ORDER BY ProjectID
    FOR XML PATH ('')
    ) table3(Label)

所以结果会是

名称标签 -------------------------------- 安全服务 32,1 技术服务 31,2: 32,7

See this SQLFiddle

【讨论】:

  • 感谢兄弟它的工作.....但我想查看这个名称标签 ------------------------ ---- 安全服务 32,1 技术服务 32,7:31,2
  • @user960439 再次看到我的回答
【解决方案2】:
select  Name, 
        cast(count as varchar(5))+','+cast(ProjectID as varchar(5)) as label
from <table>

【讨论】:

    猜你喜欢
    • 2012-05-27
    • 2011-12-21
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    相关资源
    最近更新 更多