答案 0 :(得分:1)
您可以使用JOIN
和UNION
以及汇总函数COUNT
和SUM
执行此操作:
SELECT
t.PersonID, FileCount = SUM(cnt)
FROM (
SELECT
p.PersonID, cnt = COUNT(f.FileID)
FROM Person p
LEFT JOIN Note n
ON n.PersonID = p.PersonID
LEFT JOIN [File] f
ON f.OwnerID = n.NoteID
AND f.OwnerTypeID = 'Note'
GROUP BY p.PersonID
UNION ALL
SELECT
p.PersonID, cnt = COUNT(f.FileID)
FROM Person p
LEFT JOIN [File] f
ON f.OwnerID = p.PersonID
AND f.OwnerTypeID = 'Person'
GROUP BY p.PersonID
)t
GROUP BY t.PersonID
我们的想法是首先计算File
下Notes
下的Person
个数,然后计算直接位于File
下的Person
个数。 template <std::size_t N, std::size_t... Ix>
bool in_range(std::index_sequence<Ix...>) {
return ((Ix < N) && ...);
}
。然后只需添加结果。