You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Cosmos DB查询:基于经办人筛选在单列中获取嵌套JSON的任务及子任务名称

解决Azure Cosmos DB任务与子任务的经办人筛选及合并问题

我来帮你搞定这个查询需求!针对你提供的JSON结构,咱们可以利用Azure Cosmos DB的数组函数和子查询来实现,完全不需要用到Union操作。核心思路是先筛选目标项目,然后分别提取符合经办人条件的主任务和子任务名称,再把它们合并到同一列中。

完整查询语句

SELECT 
    flattened.ItemName AS TaskOrSubTaskName
FROM 
    c
WHERE 
    c.ProjectName = "Abc"
CROSS APPLY (
    SELECT 
        ARRAY_FLATTEN(
            ARRAY_CONCAT(
                -- 提取符合条件的主任务名称
                (SELECT VALUE t.TaskName FROM t IN c.Tasks WHERE t.Assignee = "Abdul Saleem"),
                -- 提取符合条件的子任务名称
                (SELECT VALUE st.SubTaskName FROM t IN c.Tasks JOIN st IN t.SubTasks WHERE st.Assignee = "Abdul Saleem")
            ),
            1
        ) AS AllItems
) AS combined
CROSS APPLY (SELECT VALUE item FROM item IN combined.AllItems) AS flattened

逐部分解释

  1. 筛选目标项目:通过WHERE c.ProjectName = "Abc"定位到你需要的项目文档。
  2. 提取主任务名称:第一个子查询(SELECT VALUE t.TaskName FROM t IN c.Tasks WHERE t.Assignee = "Abdul Saleem")会遍历所有主任务,只保留经办人是"Abdul Saleem"的任务名称,返回一个字符串数组。
  3. 提取子任务名称:第二个子查询(SELECT VALUE st.SubTaskName FROM t IN c.Tasks JOIN st IN t.SubTasks WHERE st.Assignee = "Abdul Saleem")先展开主任务,再遍历每个主任务下的子任务,筛选出符合经办人条件的子任务名称,同样返回一个字符串数组。
  4. 合并并打平数组:用ARRAY_CONCAT把主任务和子任务的数组合并成一个二维数组,再用ARRAY_FLATTEN(..., 1)把二维数组转换成一维数组,这样所有符合条件的任务和子任务名称就都在一个数组里了。
  5. 展开成单列:最后通过两次CROSS APPLY把数组里的每个元素单独成行,最终得到一列包含所有匹配名称的结果。

针对你提供的示例数据,查询结果会是这样:

TaskOrSubTaskName
Create Customer Profile
Create Customer Profile
t5
t5

这样就完美实现了你要的:筛选特定项目,按经办人提取所有任务和对应子任务名称到同一列的需求。

内容的提问来源于stack exchange,提问作者Sahaduna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:42:46