我具有下列 - 简化 - 为表布局:的Oracle SQL骨料行到塔LISTAGG与条件
- 表块(ID)
- 表内容(ID,BLOCKID,命令,数据,类型)
content.blockId
是blocks.id
的外键。这个想法是,在内容表中,一个块有很多不同类型的内容条目。
我现在正在查找一个查询,该查询可以根据blockId提供一个聚合,其中3种不同类型的所有内容条目都连接在一起并放入相应的列中。
我已经开始,发现listagg
功能,运作良好,我做了下面的语句,并列出了我一列中的所有内容条目:
SELECT listagg(c.data, ',') WITHIN GROUP (ORDER BY c.order) FROM content c WHERE c.blockId = 330;
现在连接字符串但是包含了所有的data
一列中的块的元素。我想实现的是它根据类型将其放入单独的列中。例如content
以下内容会是这样:
- 1,1,0, “内容1”, “片段”
- 2,1,1, “内容2”, “大量”
- 3,1,3, “content4”, “片段”
- 4,1,2, “content3”, “片段”
现在我想获得作为输出2列,一种是片段和一个是BULK,其中FRAGMENT包含“content1; content3; content4”,BULK包含“content2”
有没有一种有效的方法来实现这一目标?
多数民众赞成在这里,谢谢,你碰巧知道如果我的WHERE不是= 350但是例如> 350是否也有可能获得每块一行?我尝试使用'OVER(PARTITION BY c.blockId)',它现在为每个blockId创建行,但是每个条目连接一行,就像有25个片段有25个行具有相同的内容。 –
@YanickSalzmann。 。 。你应该提出新的问题作为*问题*,而不是*评论*。 –