SQL 获取不重复的列表

SQL get list without duplicates

我正在使用 Tableau 显示来自我认为使用 PostgreSQL 的 Amazon Redshift Server 的数据。

我有一个 table 看起来像:

ID    | Source | Target
proj1 | proj1  | proj2
proj1 | proj2  | proj1
proj1 | proj3  | proj2
proj2 | proj1  | proj2
proj2 | proj2  | proj1
proj2 | proj3  | proj2

我目前正在使用 listagg 将目标列合并到每个项目的列表中,但 运行 合并到每个显示重复项和自身的项目中。

我的代码是:

Select ID,
       listagg(Target) As Tools
From Table
Group by ID

如何从列表中删除重复的 and/or 原始 ID?

一种适用于任何数据库的方法是进行两个级别的聚合,一个是删除重复的目标,另一个是按 ID 生成 CSV 目标列表:

SELECT
    ID,
    concat_func(Target) AS Tools    -- replace "concat_func" with whatever
FROM                                -- be appropriate for your database
(
    SELECT ID, Target
    FROM yourTable
    GROUP BY ID, Target
) t
GROUP BY
    ID;