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

时间:2019-07-12 14:35:34

标签: c# sql duplicates azure-sql-database string-aggregation

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

我想选择与我的PLAN有关的所有信息,因为它的ID是将它们放在我的C#程序的DataGridView中。

我们可能会影响此计划的倍数voltage levelscatenary types等,并将其存储在名为plans_into_voltageplans_into_type的表中。

因此,当我尝试选择与计划有关的所有信息时,如果计划具有多个电压和/或许多悬链线类型,它将复制这样的行:

results example

然后我尝试STRING_AGG,但是现在我已经将重复项放入行中,我不知道如何避免/删除它们。

这是我的查询:

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

Results

但是我想要这样:

this

我已经检查了this first solutionthis second one,但是我不知道如何在查询中实现它。

有人可以帮我吗?自2天以来,我一直在遇到麻烦。

谢谢!

1 个答案:

答案 0 :(得分:0)

如何尝试此查询:

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 ...
)

我用桌子测试过,它可以工作。

我的表员工中的所有数据: enter image description here

运行我的演示查询:

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

enter image description here

更新

此查询无法正常工作。

但恭喜您已解决问题:

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

希望这会有所帮助。