2017-04-02 92 views
1

如何合并领域,我知道CONCAT,但不是这样

我知道

  • MySQL的合并场的方式:CONCAT()
  • 甲骨文: CONCAT()||
  • SQL Server:`+

但是... 我想合并AFTER查询,这有可能吗?

+0

哪个目标数据库系统? – Lucero

+2

您是否真的需要针对所有3种不同数据库产品的解决方案? –

+1

SQL Server:http://stackoverflow.com/questions/1874966/concatenate-row-values-t-sql http://stackoverflow.com/questions/13639262/optimal-way-to-concatenate-aggregate-strings和其他... – Lucero

回答

3

在这里你去:

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; 

甲骨文使用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服务器使用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; 
+0

您的SQL Server示例有两种方式中断。首先它会失败,带有特殊的XML字符,如&和<,并没有像其他示例那样指定明确的顺序。这就是说,这个问题太广泛了,因为每个具体的供应商案例已经在其他SO问题中得到了回答。 – Lucero

+0

@Lucero - 感谢您的反馈。我错过了订单条款。关于特殊字符,我不认为有必要处理,因为没有月份会包含特殊字符。 – GurV

+0

查看此问题的人很可能不想特别连结月份名称...对于SO的问答格式不是一个好答案。 – Lucero

相关问题