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

SQL Server 2008视图下按NMov分组填充空NDocumento字段方案咨询

解决方案

方案1:窗口聚合函数实现(最简单高效)

SQL Server 2008支持带PARTITION BY的窗口聚合函数,且MAX聚合会自动忽略NULL值,只要同一个NMov分组内仅存在唯一非空的NDocumento值(即仅首行填充的设计规则),直接用以下语句即可:

SELECT 
    NMov,
    -- 同组所有行取该组内非空的NDocumento值
    MAX(NDocumento) OVER (PARTITION BY NMov) AS NDocumento,
    -- 其余视图字段原样输出
    其余字段1,
    其余字段2
FROM 你的视图名称

补充说明:如果你的空值不是数据库NULL而是空字符串,把MAX(NDocumento)改成MAX(NULLIF(NDocumento, ''))即可,先把空字符串转成NULL再聚合。

方案2:APPLY关联实现(适合需要明确指定首行排序规则的场景)

如果你需要严格指定首行判断规则(比如按行创建时间、自增行ID排序取第一条),可以用OUTER APPLY关联取每组首行的NDocumento:

SELECT 
    t.NMov,
    t_doc.NDocumento,
    t.其余字段1,
    t.其余字段2
FROM 你的视图名称 t
OUTER APPLY (
    SELECT TOP 1 NDocumento 
    FROM 你的视图名称 
    WHERE NMov = t.NMov 
        -- 可替换为你判断首行的条件,比如按指定列排序取第一
        AND NDocumento IS NOT NULL
        -- 示例:按行序号排序取首行:ORDER BY 行序号列 ASC
) t_doc

注意事项

  • 两种方案均完全兼容SQL Server 2008版本,无需使用LAG/LEAD等高版本才支持的函数
  • 方案1性能更好,适合数据量较大的场景,只要符合同组仅一个非空NDocumento的规则优先使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 04:45:03