如何在查询后合并字段,我知道 CONCAT,但不是这样 [重复]

Posted

技术标签:

【中文标题】如何在查询后合并字段,我知道 CONCAT,但不是这样 [重复]【英文标题】:How to Merge fields after query, i know CONCAT, but not this way [duplicate] 【发布时间】:2017-08-27 11:25:06 【问题描述】:

我知道合并字段的方法

mysqlCONCAT( ) 甲骨文:CONCAT( )|| SQL Server:`+

但是... 我想在查询后合并,可以吗?

【问题讨论】:

哪个目标数据库系统? 您真的需要针对所有 3 种不同数据库产品的解决方案吗? SQL Server:***.com/questions/1874966/…***.com/questions/13639262/… 和其他... MySQL:dev.mysql.com/doc/refman/5.0/en/… 甲骨文:***.com/questions/1127287/… 【参考方案1】:

给你:

MySQL 使用group_concat:

select a.name,
    a.opcode,
    group_concat(month order by b.pk separator ', ') as months
from tablea a
join tableb b on a.opcode = b.opcode
group by a.name, a.opcode;

Oracle 使用listagg

select a.name,
    a.opcode,
    listagg(month,', ') within group (order by b.pk) as months
from tablea a
join tableb b on a.opcode = b.opcode
group by a.name, a.opcode;

SQL Server 使用for xml pathstuff

select a.*,
    stuff((
        select ', ' + month from tableb b
        where a.opcode = b.opcode
        order by pk 
        for xml path(''), type
        ).value('(./text())[1]', 'varchar(max)')
    , 1, 2, '') as months
from tablea a;

【讨论】:

您的 SQL Server 示例在两个方面有问题。首先,它会因特殊的 XML 字符(如 & 和 @Lucero - 感谢您的反馈。我错过了 order by 条款。关于特殊字符,我认为没有必要处理,因为没有月份会包含特殊字符。 看这个问题的人很可能不想特别连接月份名称......对于 SO 的问答格式不是一个好的答案。 @Lucero - 我在答案中添加了注释。具有讽刺意味的是,它被标记为重复的问题也没有考虑特殊字符的答案。 :) 这个是:***.com/questions/5031204/…(在其他一些 T-SQL 答案中,人们也意识到了这个问题)

以上是关于如何在查询后合并字段,我知道 CONCAT,但不是这样 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库查询 concat 字段合并 身份证 名字手机号脱敏 case when等

mysql groupby 字段合并问题(group_concat)

oracle的sql查询结果拼接

MYSQL group_concat

oracle 怎么将查询到一列的数据 合并成一个字符串返回来 用“,”分割 如(张三,李思,。。。。)

如何在sql server中使用group_concat进行查询[重复]