Трюк здесь заключается в использовании атрибута 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)
Конечно, Вы можете продлить этот запрос с дополнительными пунктами, например, чтобы считать только документы, которые находятся в определенном пути, но вы получаете общую идею.
Я думал о том же, но мне нужен выходной результат, например count (obj_type_A), count (obj_Type_B), i_folder_id. Если я получу результат в вышеуказанном формате, то который будет действовать как флаг в моем коде, который сделает итерацию более миллионами данных немного быстрой. – dnup1092
ОК, я отредактировал свой ответ. Пожалуйста, поддержите его как полезный, и отметьте его как правильно. – eivamu
отредактированный запрос даст мне результат, например 'count, type, i_folder', если я не ошибаюсь. Предположим, у меня есть только два настраиваемых типа type_A и type_B, и мне нужно получить количество обоих типов документов в папке . Возможно получить счетчик как object_type в одной строке с i_folder_id. Итак, схема, в которой я хочу быть результатом, это 'count (type_A), count (type_B), i_folder_id.' В raw sql это можно сделать, используя подзапрос в select. Th – dnup1092