我有以下 - 简化 - 表格布局:
content.blockId是 的外键blocks.id。这个想法是,在内容表中,对于一个块,您有许多不同类型的内容条目。
我现在正在寻找一个查询,它可以为我提供基于 blockId 的聚合,其中 3 种不同类型的所有内容条目都连接起来并放入相应的列中。
我已经开始并找到了listagg运行良好的函数,我做了以下语句并在列中列出了所有内容条目:
SELECT listagg(c.data, ',') WITHIN GROUP (ORDER BY c.order) FROM content c WHERE c.blockId = 330;
Run Code Online (Sandbox Code Playgroud)
然而,现在连接的字符串data在一列中包含块的所有元素。我想实现的是根据类型将其放入单独的列中。例如下面的内容content是这样的:
现在我想输出 2 列,一个是 FRAGMENT,一个是 BULK,其中 FRAGMENT 包含“content1;content3;content4”,BULK 包含“content2”
有没有一种有效的方法来实现这一目标?
您可以使用case:
SELECT listagg(CASE WHEN content = 'FRAGMENT' THEN c.data END, ',') WITHIN GROUP (ORDER BY c.order) as fragments,
listagg(CASE WHEN content = 'BULK' THEN c.data END, ',') WITHIN GROUP (ORDER BY c.order) as bulks
FROM content c
WHERE c.blockId = 330;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6986 次 |
| 最近记录: |