如何删除STRING_AGG之后的重复项?
How to delete duplicates after STRING_AGG?
首先我要告诉你我是 SQL
的初学者。
我想要 select 所有与我的计划相关的信息,这要归功于将它们放在我的 C# 程序中的 DataGridView
中。
我们可以影响此计划的倍数 voltage levels
、catenary 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# 程序中的字典,使用了多个查询并加入了它们,现在它工作正常
希望对您有所帮助。
首先我要告诉你我是 SQL
的初学者。
我想要 select 所有与我的计划相关的信息,这要归功于将它们放在我的 C# 程序中的 DataGridView
中。
我们可以影响此计划的倍数 voltage levels
、catenary 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
但我想要它:
我已经检查过
有人可以帮我解决这个问题吗?自 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# 程序中的字典,使用了多个查询并加入了它们,现在它工作正常
希望对您有所帮助。