簡體   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