Хитрость здесь заключается в использовании атрибута r_object_type
для dm_sysobject
. Итак, то, что вы хотите, вероятно, достижимо только в том случае, если оба ваших пользовательских типа являются потомками 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)
Конечно, вы можете расширить этот запрос дополнительными предложениями, например. для подсчета только документов, которые находятся в пределах определенного пути, но общее представление вы уловили.
person
eivamu
schedule
30.08.2015