【发布时间】:2019-06-04 09:16:17
【问题描述】:
我正在尝试编写一个数据检索函数。本质上,此查询旨在对 Voorwerp_in_Rubriek 表中所有 voorwerpnummer 的计数进行求和,按从 Rubriek 收集的它们的 rubrieknummer 分组。
之后,我想继续循环遍历总和以到达他们的“顶级父级”。 Rubriek 有一个外键引用自身,带有一个 'hoofdrubriek',这更容易被视为它在类别树中的父级。
这也意味着它们可以嵌套。 hoofdcategory 列中的“NULL”值表示它是顶级父级。此查询背后的想法是对 Voorwerp_in_rubriek 中的 voorwerpnummer 计数进行求和,并将它们加在一起,直到它们处于“顶级父级”。
由于数据库和测试数据非常庞大,我决定不对这个问题添加直接代码,而是添加到 dbfiddle 的链接,这样结构就会更多。
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=8068a52da6a29afffe6dc793398f0998
我使用这个查询在某种程度上让它工作了:
SELECT R2.hoofdrubriek ,
COUNT(Vr.rubrieknummer) AS aantal
FROM Rubriek R1
RIGHT OUTER JOIN Rubriek R2 ON R1.rubrieknummer = R2.hoofdrubriek
INNER JOIN Voorwerp_in_rubriek Vr ON R2.rubrieknummer = Vr.rubrieknummer
WHERE NOT EXISTS ( SELECT *
FROM Rubriek
WHERE hoofdrubriek = R2.rubrieknummer )
AND R1.hoofdrubriek IS NOT NULL
GROUP BY Vr.rubrieknummer ,
R2.hoofdrubriek
但一般来说,这并不能取回所有物品和翻牌。我希望有人可以帮助我。
【问题讨论】:
-
你可以写一个递归查询来遍历你的记录树,见stackoverflow.com/questions/959804/… - 你基本上有一个
WITH,它是两部分,用一个联合连接,一个引用起始条件(@ 987654325@) 和另一部分引用了一个将 cte 连接到自身的查询(从而建立递归) -
@CaiusJard 这就像一个魅力,非常感谢你帮助我走上正确的道路。
标签: sql sql-server tsql