需要找出该人员在相关表格中包含的文件数量

时间:2015-11-17 02:51:15

标签: sql-server

我需要找出该人拥有的文件总数,它必须包含属于该人的笔记的文件。

此人可以有多个文件,人可以有多个笔记,每个笔记可以有多个文件。

如果可以在1个查询中完成,那么最好,因为这将是更大的动态查询的一部分。

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用JOINUNION以及汇总函数COUNTSUM执行此操作:

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

我们的想法是首先计算FileNotes下的Person个数,然后计算直接位于File下的Person个数。 template <std::size_t N, std::size_t... Ix> bool in_range(std::index_sequence<Ix...>) { return ((Ix < N) && ...); } 。然后只需添加结果。