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

导入Fitbit JSON文件时如何用OUTER APPLY获取全量唯一键名

场景1:仅提取JSON一级键的唯一集合

直接对L2.[key]加DISTINCT去重即可,代码如下:

SELECT DISTINCT L2.[key] AS unique_top_key
FROM OPENJSON(@json,'$') AS L1
OUTER APPLY OPENJSON(L1.[value]) AS L2
ORDER BY L2.[key]

这个方案可以直接解决你当前的问题,输出所有顶层活动属性的唯一键,不会重复出现不同记录共有的键。

场景2:提取包含嵌套对象在内的全量唯一键

如果你还需要拿到manualValuesSpecified、source这类嵌套对象内部的子键,用递归CTE处理即可:

WITH RecursiveJsonKeys AS (
    -- 第一层:提取数组内所有对象的顶层键
    SELECT
        L2.[key] AS full_key_path,
        L2.[value] AS node_value,
        L2.[type] AS node_type
    FROM OPENJSON(@json, '$') L1
    OUTER APPLY OPENJSON(L1.[value]) L2

    UNION ALL

    -- 递归层:如果当前节点是JSON对象,继续提取内部键
    SELECT
        R.full_key_path + '.' + CHILD.[key] AS full_key_path,
        CHILD.[value] AS node_value,
        CHILD.[type] AS node_type
    FROM RecursiveJsonKeys R
    CROSS APPLY OPENJSON(R.node_value) CHILD
    WHERE R.node_type = 5 -- OPENJSON返回的type=5代表值为JSON对象
)
-- 去重输出全量唯一键
SELECT DISTINCT full_key_path
FROM RecursiveJsonKeys
ORDER BY full_key_path

执行后会输出类似manualValuesSpecified.calories、source.id这类完整键路径,方便你后续在WITH子句中定义所有需要提取的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:48:02