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

如何用SQL汇总/合并设计不佳的MS Access表中的行数据?

MS Access 无高级函数实现数据转置方案

针对无法修改原表、不能用PARTITION BY/ROW_NUMBER()等函数的情况,以下是基于Access原生SQL的可行方案:

核心思路

通过分组聚合+子查询计数的方式,分别提取每个KeyID对应的PA规则、QL的第一条/第二条规则,最后关联合并结果。

完整SQL代码

假设原表名为RawTable,替换成你的实际表名即可:

SELECT 
    pa_grp.KeyID,
    pa_grp.PA,
    ql_grp.QL,
    pa_grp.RuleNamePA,
    ql_grp.RuleNameQL,
    ql_sec.RuleNameQL2
FROM 
    -- 提取PA对应的规则和状态
    (SELECT KeyID, First(PA) AS PA, First(RuleName) AS RuleNamePA
     FROM RawTable
     WHERE PA = 'X'
     GROUP BY KeyID) AS pa_grp
LEFT JOIN 
    -- 提取QL的第一条规则和状态
    (SELECT KeyID, First(QL) AS QL, First(RuleName) AS RuleNameQL
     FROM RawTable
     WHERE QL = 'X'
     GROUP BY KeyID) AS ql_grp ON pa_grp.KeyID = ql_grp.KeyID
LEFT JOIN 
    -- 提取QL的第二条规则(通过子查询计数定位)
    (SELECT t1.KeyID, t1.RuleName AS RuleNameQL2
     FROM RawTable t1
     WHERE QL = 'X'
     AND (SELECT COUNT(*) 
          FROM RawTable t2 
          WHERE t2.KeyID = t1.KeyID 
            AND t2.QL = 'X' 
            AND t2.RuleName <= t1.RuleName) = 2) AS ql_sec ON pa_grp.KeyID = ql_sec.KeyID;

注意事项

  • 如果RuleName的排序不是按字符串顺序,需要调整子查询中的t2.RuleName <= t1.RuleName条件,替换成原表中能确定顺序的字段(比如存在时间戳或自增ID的话)。
  • 若部分KeyID没有第二条QL规则,RuleNameQL2会显示为Null,符合Access的默认行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:33:53