【发布时间】:2020-02-09 19:27:04
【问题描述】:
我在这里做的是:
表 1:AOC_Model
AOC_ID int (Primary Key)
Model varchar(50)
表 2:AOC_Chipset
AOC_CHIPSET_ID int (Primary Key)
CONTROLLER_ID int
CHIPSET_ID int
AOC_ID int
表 3:控制器
CONTROLLER_ID int (Primary Key)
CONTROLLER varchar(10)
表 4:芯片组
CONTROLLER_ID int (Primary Key)
CHIPSET_ID int (Primary Key)
CHIPSET varchar(50)
表 5:Notes_Chipset
NOTES_CHIPSET_ID int (Primary Key)
CONTROLLER_ID int
CHIPSET_ID int
DATE date
NOTES varchar(800)
首先我有一个通过 Controller_ID 连接到控制器的芯片组表 然后我有 AOC_Chipset,它实际上充当控制器和芯片组之间的连接表。 AOC_Chipset 通过 Controller_ID 和 Chipset_id 加入 Chipset 然后我有 Notes_Chipset,它也通过 Controller_ID 和 Chipset_id 加入到 Chipset 最后,我有通过 AOC_ID 加入 AOC_Chipset 的 AOC_Model
我在这里有很多对很多的关系。 我可以将一个或两个控制器分配给相同的 AOC_ID。 我可以将一两个芯片组分配给同一个控制器。 我可以将多个笔记分配给同一个芯片组。
我在 SQL Server 2019 中创建了这个查询:
SELECT
dbo.AOC_CHIPSET.AOC_ID,
string_agg(dbo.CONTROLLER.CONTROLLER, ', ') AS vControllers,
string_agg(dbo.CHIPSET.CHIPSET, ', ') AS vChipsets,
string_agg(dbo.NOTES_CHIPSET.DATE, ', ') AS vDate,
string_agg(dbo.NOTES_CHIPSET.NOTES, ', ') AS vNotes
FROM
dbo.AOC_CHIPSET
INNER JOIN
dbo.CHIPSET ON dbo.AOC_CHIPSET.CONTROLLER_ID = dbo.CHIPSET.CONTROLLER_ID
AND dbo.AOC_CHIPSET.CHIPSET_ID = dbo.CHIPSET.CHIPSET_ID
INNER JOIN
dbo.CONTROLLER ON dbo.CHIPSET.CONTROLLER_ID = dbo.CONTROLLER.CONTROLLER_ID
INNER JOIN
dbo.NOTES_CHIPSET ON dbo.CHIPSET.CONTROLLER_ID = dbo.NOTES_CHIPSET.CONTROLLER_ID
AND dbo.CHIPSET.CHIPSET_ID = dbo.NOTES_CHIPSET.CHIPSET_ID
AND dbo.CONTROLLER.CONTROLLER_ID = dbo.NOTES_CHIPSET.CONTROLLER_ID
GROUP BY
dbo.AOC_CHIPSET.AOC_ID
问题是结果包含重复项
我知道我可以使用DISTINCT,但我不知道在哪里/如何将它与string_agg 结合使用?
【问题讨论】:
-
示例数据和所需输出将很有用! Please do not post image of data
-
您能否详细介绍一下您的架构。特别是,重要的是要知道所有这些表中哪些列组合是唯一键或主键。
-
不确定我在问题中添加的内容是否足够好。我不想听起来令人困惑,也不想在不提供图片(如图表)或示例代码的情况下不确定如何更好地解释。看起来两者都不可接受,因为上面提到的人不发布图片:-(
-
感谢您提供更多信息。我的答案中的 SQL 有帮助吗?
标签: sql-server string-aggregation