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

C# 如何在STRING_AGG之后删除重复项?,c#,sql,duplicates,azure-sql-database,string-aggregation,C#,Sql,Duplicates,Azure Sql Database,String Aggregation,首先我要告诉你,我是SQL的初学者 我想选择与我的计划相关的所有信息,因为它的id将它们放在我的C#程序的DataGridView中 我们可以影响多个电压水平,接触网类型等。。。它将存储在一个名为plans\u into\u voltage和plans\u into\u type的表中 因此,当我尝试选择与计划相关的所有信息时,如果计划具有多个电压和/或多个接触网类型,它将复制如下行: 然后我尝试STRING\u AGG,但现在我的行中有重复项,我不知道如何避免/删除它们 这是我的疑问: SE

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

我想选择与我的计划相关的所有信息,因为它的id将它们放在我的C#程序的
DataGridView

我们可以影响多个
电压水平
接触网类型
等。。。它将存储在一个名为
plans\u into\u voltage
plans\u into\u type
的表中

因此,当我尝试选择与计划相关的所有信息时,如果计划具有多个电压和/或多个接触网类型,它将复制如下行:

然后我尝试
STRING\u 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

但我想要的是:

我已经检查过了,但是我不知道如何用我的查询实现它

有人能帮我吗?我两天来一直在这麻烦事上


谢谢

试试这个查询怎么样:

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 ...
)
我用我的桌子做了测试,结果很好

“我的员工”表中的所有数据:

运行我的演示查询:

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

更新:

此查询无法按预期工作

但恭喜你解决了这个问题:

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


希望这能有所帮助。

谢谢你的帮助,我认为我们走的路是对的,但我仍然有错误。1) 我不得不添加
作为ptest
between')和“groupbypinfos.id”,因为它说语法不正确。2) 现在,使用“正确”语法,我遇到了SQL错误4104:无法绑定多部分标识符“pinfos.id”。我尝试了一些方法,但没有成功,也许你会发现问题出在哪里。我解决了所有错误,现在的查询看起来是这样的:不幸的是,它不起作用,我得到的结果与以前相同。你是否运行了
选择DISTINCT pinfos.id作为planid,pinfos.plan\u name AS planname…
语句来测试重复值是否已被排除?不太可能,我只是在运行SELECT DISTINCT查询时得到的。我想这是由于表左联接较多造成的。可能
选择DISTINCT
仅对一个表有效,或者尝试更改左连接,然后再次测试。