如何使用 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_sysobject
的 r_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)
您当然可以使用附加子句扩展此查询,例如为了仅计算特定路径内的文档,但您已经了解了总体思路。
我有两种类型的文档 obj_type_A 和 obj_type_B,它们可能在也可能不在 obj_type_fldr.
类型的文件夹中我需要获取类型为 obj_type_fldr 的文件夹中的两个文档的数量。
如果它有一个sql我们可以在select子句中写子查询。但是DQL 不支持这个功能。
这里的技巧是利用 dm_sysobject
的 r_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)
您当然可以使用附加子句扩展此查询,例如为了仅计算特定路径内的文档,但您已经了解了总体思路。