【问题标题】:SQL Server Convert Particular Column Values into comma separated StringSQL Server 将特定列值转换为逗号分隔的字符串
【发布时间】:2018-02-26 07:23:38
【问题描述】:

我在数据库中有一个如下表:

Id  Name
1   Item1
1   Item2
2   Item3
1   Item4
3   Item5

我需要如下输出(第 3 列是计数):

1   Item1,Item2,Item4   3
2   Item3               1
3   Item5               1

SQL Query 是如何实现的?

【问题讨论】:

标签: sql sql-server string-aggregation


【解决方案1】:

SQL Server 有STUFF() 函数可以帮助你。

SELECT t.Id,
       Name = STUFF( (SELECT DISTINCT ','+Name 
                      FROM table 
                      WHERE Id = t.Id 
                      FOR XML PATH('')
                     ), 1, 1, ''
                   ) 
FROM table t
GROUP BY t.Id; 

【讨论】:

  • STUFF 为我工作..Thanx
【解决方案2】:

SQL Server 2017 引入了一种更简单的方法来使用STRING_AGG(expression, separator) 实现此目的。

这是一个例子:

SELECT STRING_AGG(T.Name, ', ') FROM MyTable T where MyColumnID = 78

您甚至可以像这样使用其他方式进行格式化:

SELECT STRING_AGG(CONCAT(T.MyColumnID,' - ',T.Name), ', ') FROM MyTable T where MyColumnID = 78

我在这个博客中找到了更多信息:https://database.guide/the-sql-server-equivalent-to-group_concat/

【讨论】:

    【解决方案3】:
    select id, group_concat(name) csv,
    from Table
    group by id
    

    【讨论】:

    • 我的答案发布后问题发生了变化:/
    • 仍然是针对未指定 dbms 的问题的产品特定答案。至少告诉我们这是用于哪个 dbms。
    • @jarlh 任何问题的任何答案 ;)
    • 此语法适用于MySQL
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 2012-09-04
    • 2013-02-04
    • 1970-01-01
    • 2012-01-17
    相关资源
    最近更新 更多