如何在查询后合并字段,我知道 CONCAT,但不是这样 [重复]
Posted
技术标签:
【中文标题】如何在查询后合并字段,我知道 CONCAT,但不是这样 [重复]【英文标题】:How to Merge fields after query, i know CONCAT, but not this way [duplicate] 【发布时间】:2017-08-27 11:25:06 【问题描述】:我知道合并字段的方法
mysql:CONCAT( )
甲骨文: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 path
和stuff
:
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)