首先是相关架构:
A 是具有 ListID、Date 和 ItemID 的列表条目表
B 是具有 ID 和所有者的基础项目表(当前为文本)。
C 是具有 ID (int)、Name (varchar) 和 Parent (int) 的所有者表。Parent 是另一个成员的 ID,如果它是顶级节点,则为 null。该表只有 2 层深,因此每个成员要么是孩子,要么是父母。
A.ItemID 指向 B.ID B.Owner 指向 C.Name C.Parent 为空或指向另一个 C.ID
现在问题...
我需要为 C 中的每个父项计算给定列表(ListID 和日期)上的条目数。我几乎遇到了一个问题。查询是:
select C.owner, COUNT(B.ID) as Count from A
join B on A.ItemID = B.ID
join C on B.Owner= C.Owner
join C2 on C.Parent = C2.ID
Where date = '2011-01-10' and ListID = 1
Group by C2.Owner
order by C2.Owner
但它只计算与 C 中的子行匹配的条目。由于父行在父字段中没有自己的 ID,因此即使有直接拥有的项目,它们也不会包含在汇总计数中表 C 中的父母。我很确定我可以通过将这些值放入其中来解决问题,但这似乎是糟糕的设计,因为这些行实际上是它们自己的父母。
有没有办法管理这个查询来解决这个问题?我难住了。
或者,是否可以让行将自己作为父级引用,以便将自己的数据与其子级的数据聚合起来?
感谢您在这里提供的任何建议。如果不清楚,我可以更具体,但我试图将不相关的信息排除在外。
-担