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

Access中用嵌套查询替换主查询依赖的多个独立子查询方法咨询

解决方案

方案1:条件聚合写法(推荐,代码更简洁高效)

无需多层嵌套连接,仅需一次关联+条件取值即可得到和原有主查询完全一致的结果,执行效率更高,维护成本更低:

SELECT 
  r.RateAirlineID,
  MAX(IIF(s.RateSlab='Min', s.NetRate, NULL)) AS MinNR,
  MAX(IIF(s.RateSlab='Min', s.SellingRate, NULL)) AS MinSR,
  MAX(IIF(s.RateSlab='-45', s.NetRate, NULL)) AS [-45NR],
  MAX(IIF(s.RateSlab='-45', s.SellingRate, NULL)) AS [-45SR],
  MAX(IIF(s.RateSlab='+45', s.NetRate, NULL)) AS [+45NR],
  MAX(IIF(s.RateSlab='+45', s.SellingRate, NULL)) AS [+45SR],
  MAX(IIF(s.RateSlab='100', s.NetRate, NULL)) AS [+100NR],
  MAX(IIF(s.RateSlab='100', s.SellingRate, NULL)) AS [+100SR],
  MAX(IIF(s.RateSlab='300', s.NetRate, NULL)) AS [+300NR],
  MAX(IIF(s.RateSlab='300', s.SellingRate, NULL)) AS [+300SR],
  MAX(IIF(s.RateSlab='500', s.NetRate, NULL)) AS [+500NR],
  MAX(IIF(s.RateSlab='500', s.SellingRate, NULL)) AS [+500SR],
  MAX(IIF(s.RateSlab='1000', s.NetRate, NULL)) AS [+1000NR],
  MAX(IIF(s.RateSlab='1000', s.SellingRate, NULL)) AS [+1000SR],
  MAX(IIF(s.RateSlab='Pivot', s.RateSlab, NULL)) AS [Pivot],
  MAX(IIF(s.RateSlab='Pivot', s.NetRate, NULL)) AS PivotNR,
  MAX(IIF(s.RateSlab='Pivot', s.SellingRate, NULL)) AS PivotSR
FROM RateAirlineTable r
LEFT JOIN RateAirlineSlabTable s ON r.RateAirlineID = s.RateAirlineid
GROUP BY r.RateAirlineID

方案2:嵌套子查询替换方案(完全匹配原有逻辑)

将你原来的8个独立查询直接作为子查询嵌套在连接语句中,保留原有逻辑不变,替换后可直接运行:

SELECT RateAirlineTable.RateAirlineID, RateMinQuery.NetRate AS MinNR, RateMinQuery.SellingRate AS MinSR, [Rate-45Query].NetRate AS [-45NR], [Rate-45Query].SellingRate AS [-45SR], [Rate+45Query].NetRate AS [+45NR], [Rate+45Query].SellingRate AS [+45SR], [Rate+100Query].NetRate AS [+100NR], [Rate+100Query].SellingRate AS [+100SR], [Rate+300Query].NetRate AS [+300], [Rate+300Query].SellingRate AS [+300SR], [Rate+500Query].NetRate AS [+500NR], [Rate+500Query].SellingRate AS [+500SR], [Rate+1000Query].NetRate AS [+1000NR], [Rate+1000Query].SellingRate AS [+1000SR], RatePivotQuery.RateSlab AS [Pivot], RatePivotQuery.NetRate AS PivotNR, RatePivotQuery.SellingRate AS PivotSR 
FROM 
(SELECT RateAirlineid, RateSlab, NetRate, SellingRate FROM RateAirlineSlabTable WHERE RateSlab='Pivot') AS RatePivotQuery
RIGHT JOIN (
  (SELECT RateAirlineid, RateSlab, NetRate, SellingRate FROM RateAirlineSlabTable WHERE RateSlab='1000') AS [Rate+1000Query]
  RIGHT JOIN (
    (SELECT RateAirlineid, RateSlab, NetRate, SellingRate FROM RateAirlineSlabTable WHERE RateSlab='500') AS [Rate+500Query]
    RIGHT JOIN (
      (SELECT RateAirlineid, RateSlab, NetRate, SellingRate FROM RateAirlineSlabTable WHERE RateSlab='300') AS [Rate+300Query]
      RIGHT JOIN (
        (SELECT RateAirlineid, RateSlab, NetRate, SellingRate FROM RateAirlineSlabTable WHERE RateSlab='100') AS [Rate+100Query]
        RIGHT JOIN (
          (SELECT RateAirlineid, RateSlab, NetRate, SellingRate FROM RateAirlineSlabTable WHERE RateSlab='+45') AS [Rate+45Query]
          RIGHT JOIN (
            (SELECT RateAirlineid, RateSlab, NetRate, SellingRate FROM RateAirlineSlabTable WHERE RateSlab='-45') AS [Rate-45Query]
            RIGHT JOIN (
              (SELECT RateAirlineid, RateSlab, NetRate, SellingRate FROM RateAirlineSlabTable WHERE RateSlab='Min') AS RateMinQuery
              RIGHT JOIN RateAirlineTable 
              ON RateMinQuery.RateAirlineid = RateAirlineTable.RateAirlineID
            ) ON [Rate-45Query].RateAirlineid = RateAirlineTable.RateAirlineID
          ) ON [Rate+45Query].RateAirlineid = RateAirlineTable.RateAirlineID
        ) ON [Rate+100Query].RateAirlineid = RateAirlineTable.RateAirlineID
      ) ON [Rate+300Query].RateAirlineid = RateAirlineTable.RateAirlineID
    ) ON [Rate+500Query].RateAirlineid = RateAirlineTable.RateAirlineID
  ) ON [Rate+1000Query].RateAirlineid = RateAirlineTable.RateAirlineID
) ON RatePivotQuery.RateAirlineid = RateAirlineTable.RateAirlineID;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:09:04