我是Oracle的新手。卡在下面:我有下面的2表:
地点:
**SiteID|SiteName**
1 Sydney
2 Newyork
3 Delhi
人们:
**RecordID|PeopleID|SiteID**
1 1 1
2 1 2
3 2 2
4 3 1
5 3 2
6 3 3
现在在我的查询中,我想要这样的输出:
**PeopleID | AssignedSites**
1 Sydney,NewYork
2 Newyork
3 Sydney,NewYork,Delhi
-该解决方案应该在Oracle 10g和11g中都可以使用。
-为简洁起见,我在上面的示例中给出了一小部分数据,但是在我的产品场景中,一个Person可以与1000+个位置相关联,并且可以有1000+个这样的人,因此在这种情况下解决方案应该不会失败!
任何帮助将不胜感激。
提前致谢。
尝试XMLAGG
像这样使用:
select
p.PeopleID,
rtrim(xmlagg(xmlelement(e, s.SiteName, ',')).extract('//text()').getclobval(), ',')
from people p
join site s on p.SiteID = s.SiteID
group by p.PeopleID;
如果您需要按特定顺序进行连接,例如按SiteId的升序排列,则order by
在xmlagg中添加一个子句:
select
p.PeopleID,
rtrim(xmlagg(xmlelement(e, s.SiteName, ',')
order by s.SiteId).extract('//text()').getclobval(), ',')
from people p
join site s on p.SiteID = s.SiteID
group by p.PeopleID;
如果要显示分配给站点100的所有人员的结果,请执行以下操作:
select p.PeopleID,
rtrim(xmlagg(
xmlelement(e, s.SiteName, ',') order by s.SiteId
).extract('//text()').getclobval(), ',')
from people p
join site s on p.SiteID = s.SiteID
join (
select distinct PeopleID
from people
where siteID = 1
) p2 on p.PeopleID = p2.PeopleID
group by p.PeopleID;
问题内容: 我的客户正在使用不带listagg功能的db2数据库,但是我需要以某种方式在一个字段中聚合主键信息。 现在(对于Oracle),我正在将其用作更大查询的一部分: 从9.7 Fix Pack4版本1开始,还有另一种方法可以在DB2之前的db2数据库中获取listagg函数的结果。 客户数据库的版本:Linux-企业服务器版本9.7,发行号08060107 我通过执行以下选择获得了它: 我
问题内容: listagg是Oracle 11.2中引入的功能!现在,此功能正在分配给我们,我们正在从MySQL迁移到Oracle,我们有以下查询: 据我们所知,Oracle在MySQL下工作正常,在MySQL下运行良好,它会根据需要返回VARCAR而不是CLOB! 文本很大,我们确实需要CLOB ! 这是我试图做的! 创建一个CLOB类型的CLOB_T表! 然后创建函数 现在,如果我运行它: 我
问题内容: 我正在尝试在SQLServer中聚合“ STRING”字段。我想找到与Oracle中相同的函数LISTAGG。 您知道如何执行相同的功能或其他方法吗? 例如, 我希望这个查询的结果是 问题答案: 从SQL Server 2017开始,该功能可用,从而大大简化了逻辑: 在SQL Server中,您可以用来获取结果:
问题内容: 我需要将列转换为行并获取其平均值。 例如,我有此表: 输出应为: 我该如何实现?感谢您的帮助。 问题答案: 如果您使用的是11G,则可以使用: 但是由于您不是,所以您可以伪造它。从本网站改编: 在这两种情况下,内部结构都将行转换为列。在10克中,您只需要自己做即可。在刚刚产生虚值的列表,这必须有足够的覆盖要转换为行(如果你真的有1000,你真的应该重新审视数据模型)的列数。这两个语句使
问题内容: 我需要函数,该函数返回字符串列表。 我在表中有这样的数据: 我需要这样的功能(在oracle中类似的功能): 返回如下内容: 有任何想法吗? 问题答案: 您正在寻找GROUP_CONCAT() 尝试这个: 当然,您可以得到结果。
问题内容: 考虑表学生: 使用以下查询,我们得到: 由此我们将得到: 我们如何得到类似的东西 问题答案: 这应该做的工作