【问题标题】:get result seperated with commas in one row [duplicate]在一行中用逗号分隔结果[重复]
【发布时间】:2013-05-01 07:56:03
【问题描述】:

这是我写的查询:

select d.canonical_name,
       l.locale_id,
       d.domain_id,
       ld.display_name,
       p.canonical_name as Identity_Set
  from locale_domain ld
  join domain d on ld.domain_id = d.domain_id
  join locale l on l.locale_id = ld.locale_id
  join domain_set ds on ds.domain_id = d.domain_id
  join set_property sp on sp.domain_set_id = ds.domain_set_id
  join property p on p.property_id = sp.property_id
 where d.canonical_name = 'Video Games'
   and ds.canonical_name = 'IDENTITY_SET'
   group by l.locale_id,d.canonical_name,
       d.domain_id,
       ld.display_name,p.canonical_name
 order by l.locale_id

这是输出:

Video Games 0   1794    Games                   Video Game Name
Video Games 0   1794    Games                   Video Game Platform
Video Games 1   1794    Video Games_de_DE   Video Game Name
Video Games 1   1794    Video Games_de_DE   Video Game Platform
Video Games 2   1794    Video Games_en_GB   Video Game Name
Video Games 2   1794    Video Games_en_GB   Video Game Platform

这是我需要的:

Video Games 0   1794    Games                  Video Game Name, Video Game Platform
Video Games 1   1794    Video Games_de_DE      Video Game Name, Video Game Platform
Video Games 2   1794    Video Games_en_GB      Video Game Name, Video Game Platform

如您所见,我需要它不同,并且我需要用逗号分隔的身份集的结果

谢谢

【问题讨论】:

  • 您使用的是哪个 DBMS?
  • 嗨,我用的是 oracle pl sql
  • 什么版本的oracle?
  • 我正在使用 orcale 11.2

标签: sql oracle concatenation distinct


【解决方案1】:

您可以使用 Oracle 11 中的 listagg() 函数来做到这一点:

with t as (<your query here>)
select cannonical_name, domain_id, ld.display_name,
       listagg(identity_set, ',') within group (order by locale_id)
from t
group by cannonical_name, domain_id, ld.display_name

【讨论】:

  • 非常感谢完美的工作
猜你喜欢
  • 2016-03-08
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多