代码之家  ›  专栏  ›  技术社区  ›  dnup1092

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

  •  1
  • dnup1092  · 技术社区  · 9 年前

    我有两种类型的文档,即obj_type_A和obj_type_B,它们可能在obj_type_fldr类型的文件夹中,也可能不在其中。

    我需要获取obj_type_fldr类型文件夹中存在的两个文档的计数。

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

    1 回复  |  直到 9 年前
        1
  •  1
  •   eivamu    9 年前

    这里的技巧是利用 r_object_type 的属性 dm_sysobject 。因此,只有当两种自定义类型都是 dm_sys对象 。在这种情况下,这就是你的做法。

    基本计数

    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)
    

    当然,您可以使用额外的子句来扩展此查询,例如,为了只计算特定路径内的文档,但您可以大致理解。