[英]How to format results in Postgres?
我需要显示位于虚拟学习环境 (VLE) 中的课程内容的位置 - 基本上它是一个由 Postgres 数据库支持的教学和学习网站。
我创建了以下返回原始数据的查询。 下面是一个示例
WITH RECURSIVE folders AS(
SELECT ccs.pk1, ccs.parent_pk1, ccs.position, ccs.folder_ind, ccs.title
FROM course_contents ccs
INNER JOIN course_main cm ON cm.pk1 = ccs.crsmain_pk1
WHERE cm.course_id = '<COURSE ID>'
and ccs.pk1 = '<INDEX>' -- primary key
UNION ALL
SELECT cc.pk1, cc.parent_pk1, cc.position, cc.folder_ind, cc.title
FROM course_contents cc
JOIN folders ON folders.pk1 = cc.parent_pk1
)
SELECT f.*
FROM folders f
样本数据
PK1 | PARENT_PK1 | 位置 | 文件夹 | 标题 |
---|---|---|---|---|
11497702 | 无效的 | 0 | 是 | 评估 |
11497708 | 11497702 | 0 | N | 使用评估工具 |
11497709 | 11497702 | 1 | N | 过去的试卷 |
11497710 | 11497702 | 2 | N | 使用评估工具 |
11497711 | 11497702 | 3 | N | 过去的试卷 |
我想像下表一样显示它。 需要注意的是,有多个级别 - 文件夹中的文件,文件夹中的文件夹等。
小路 |
---|
评估 - 使用评估工具 |
评估 - 过去的考试试卷 |
评估 - 使用评估工具 |
评估 - 过去的考试试卷 |
我使用了以下行
SELECT STRING_AGG(f.title,' - ') AS path
FROM folders f
GROUP BY f.parent_pk1
但它显示为
小路 |
---|
评估 |
使用评估工具 - 过去的考试试卷 - 使用评估工具 - 过去的考试试卷” |
任何帮助将不胜感激。
谢谢
嗯。 . . 我认为你想要这样的东西而不是聚合:
select f.*
from (select first_value(f.title) over (order by position) || '-' || first_value(f.title) over (order by position desc)
from folders f
) f
where folder = 'N';
感谢上面戈登的回答,我找到了我正在寻找的答案。
我对戈登的代码做了一些改动。 请参阅下文。 我确实需要用更多的数据来测试它,看看它是否完全复制了内容结构。
select f.*
from (select first_value(f.title) over (order by position) || ' > ' ||
f.title
from folders f
where f.folder_ind = 'N'
) f
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.