繁体   English   中英

如何在 Postgres 中格式化结果?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM