如何使用 DQL 获取文件夹中不同类型文档的数量

How to get count of different types of document in a folder using DQL

我有两种类型的文档 obj_type_A 和 obj_type_B,它们可能在也可能不在 obj_type_fldr.

类型的文件夹中

我需要获取类型为 obj_type_fldr 的文件夹中的两个文档的数量。

如果它有一个sql我们可以在select子句中写子查询。但是DQL 不支持这个功能。

这里的技巧是利用 dm_sysobjectr_object_type 属性。所以你想要的可能只有在你的两个自定义类型都是 dm_sysobject 的后代时才能实现。在这种情况下,这就是您的做法。

基本计数

SELECT count(r_object_id), r_object_type 
FROM dm_sysobject
WHERE ANY i_folder_id IN (
    SELECT r_object_id 
    FROM obj_type_fldr
) 
AND r_object_type IN ('obj_type_A','obj_type_B') 
GROUP BY r_object_type

示例输出:

dm_attr_0001  r_object_type
------------  --------------------------------
         271  obj_type_A
         195  obj_type_B
(2 rows affected)

每个文件夹计数

此外,如果您想计算每个文件夹中有多少文档,只需将 i_folder_id 添加到您的查询中,如下所示:

SELECT count(r_object_id), r_object_type, i_folder_id 
FROM dm_sysobject
WHERE ANY i_folder_id IN (
    SELECT r_object_id 
    FROM obj_type_fldr
) 
AND r_object_type IN ('obj_type_A','obj_type_B') 
GROUP BY r_object_type, i_folder_id

示例输出:

dm_attr_0001  r_object_type     i_folder_id
------------  ----------------  ----------------
         271  obj_type_A        0b00000080000001
         100  obj_type_B        0b00000080000001
          95  obj_type_B        0b00000080000002
(3 rows affected)

您当然可以使用附加子句扩展此查询,例如为了仅计算特定路径内的文档,但您已经了解了总体思路。