如何删除STRING_AGG之后的重复项?

How to delete duplicates after STRING_AGG?

首先我要告诉你我是 SQL 的初学者。

我想要 select 所有与我的计划相关的信息,这要归功于将它们放在我的 C# 程序中的 DataGridView 中。

我们可以影响此计划的倍数 voltage levelscatenary types 等...,它将存储在名为 plans_into_voltage 和 [=17= 的 table 中] 那里

所以当我尝试选择与计划相关的所有信息时,如果它有多个电压 and/or 许多接触网类型,它会像这样复制行:

然后我尝试 STRING_AGG 但现在我在行中有重复项,我不知道如何避免 that/remove 它们..

这是我的查询:

SELECT TOP 20 pinfos.id
     , STRING_AGG(pinfos.plan_name, '|') 
     , STRING_AGG (voltage.name, '|') AS vname 
     , STRING_AGG(catType.name, '|') AS catname
FROM [allocation_schematic.information].primary_infos pinfos
     LEFT JOIN [allocation_schematic.types].plans_into_type pit 
            ON pinfos.id = pit.id_plan
     LEFT JOIN [allocation_schematic.types].catenary_type catType 
            ON pit.id_type = catType.id
     LEFT JOIN [allocation_schematic.types].plans_into_voltage pot 
            ON pinfos.id = pot.id_plan
     LEFT JOIN [allocation_schematic.types].voltage voltage 
            ON pot.id_voltage = voltage.id
GROUP BY pinfos.id

但我想要它:

我已经检查过 and this second one 但我不明白如何用我的查询实现它。

有人可以帮我解决这个问题吗?自 2 天以来我一直遇到这个麻烦..

谢谢!

试试这个查询怎么样:

SELECT TOP 20 pinfos.id
    , STRING_AGG(pinfos.plan_name, '|') 
     , STRING_AGG (voltage.name, '|') AS vname 
     , STRING_AGG(catType.name, '|') AS catname
FROM (
    SELECT  DISTINCT pinfos.id 
                    pinfos.plan_name,
                    voltage.name,
                    catType.name
    FROM [allocation_schematic.information].primary_infos pinfos
     LEFT JOIN [allocation_schematic.types].plans_into_type pit 
            ON pinfos.id = pit.id_plan
     LEFT JOIN [allocation_schematic.types].catenary_type catType 
            ON pit.id_type = catType.id
     LEFT JOIN [allocation_schematic.types].plans_into_voltage pot 
            ON pinfos.id = pot.id_plan
     LEFT JOIN [allocation_schematic.types].voltage voltage 
            ON pot.id_voltage = voltage.id
)
GROUP BY pinfos.id

这个查询是根据这个语句修改的:

SELECT STRING_AGG(data)
FROM (
   SELECT DISTINCT FROM ...
)

我用我的 table 测试过,它有效。

我的 table 员工的所有数据:

运行 我的演示查询:

SELECT emp.deptno, STRING_AGG(emp.ename,',') AS ename from (
    SELECT DISTINCT ename, deptno  FROM employee) as emp
GROUP BY emp.deptno

更新:

此查询未按预期工作。

不过恭喜你已经解决了:

由于我的 c# 程序中的字典,使用了多个查询并加入了它们,现在它工作正常

希望对您有所帮助。