首先,我要告诉你我是SQL
的初学者。
我想选择与我的PLAN有关的所有信息,因为它的ID是将它们放在我的C#程序的DataGridView
中。
我们可能会影响此计划的倍数voltage levels
,catenary types
等,并将其存储在名为plans_into_voltage
和plans_into_type
的表中。
因此,当我尝试选择与计划有关的所有信息时,如果计划具有多个电压和/或许多悬链线类型,它将复制这样的行:
然后我尝试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
但是我想要这样:
我已经检查了this first solution和this second one,但是我不知道如何在查询中实现它。
有人可以帮我吗?自2天以来,我一直在遇到麻烦。
谢谢!
答案 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 ...
)
我用桌子测试过,它可以工作。
运行我的演示查询:
SELECT emp.deptno, STRING_AGG(emp.ename,',') AS ename from (
SELECT DISTINCT ename, deptno FROM employee) as emp
GROUP BY emp.deptno
更新:
此查询无法正常工作。
但恭喜您已解决问题:
在我的c#程序中使用了一个字典,使用了多个查询并加入了它们,现在可以正常工作了
希望这会有所帮助。