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

TRANSFORM与SELECT间使用Switch嵌套子查询报错问题咨询

问题原因

你遇到的报错不是Switch函数本身导致的,核心原因是Access的TRANSFORM交叉表查询的聚合参数中不允许嵌套多层聚合子查询。
你当前写法的问题有两个:

  • TRANSFORM后跟随的是SUM聚合函数,你在Switch的分支逻辑里嵌入了两层带SUM聚合的子查询,交叉表本身已经存在GROUP BY Sector的聚合规则,多层聚合嵌套会触发Access查询引擎的语法校验错误,也就是你看到的提示:

子查询中不允许多层GROUP BY子句

  • 原SQL的WHERE子句末尾多了一个多余的双引号,属于语法错误。
解决方法

方案1:提前计算系数值

先单独执行系数查询拿到对应的值,再代入到交叉表查询中,避免嵌套子查询:

  1. 执行下方查询拿到Name1对应的系数:
SELECT sum(MktValue)/(select sum(MktValue) FROM Table2 WHERE Portefeuille IN ( 'Name1' , 'Name2') AND LaDate = #27/10/2021#) AS coef1
FROM Table2 WHERE Name IN ( 'Name1') AND LaDate = #27/10/2021#
  1. 把拿到的coef1值替换到交叉表查询中,修改后的可执行SQL如下:
TRANSFORM SUM(Rate* SWITCH(Name = 'Name1', [替换为你算出的coef1值], Name = 'Name2',0.75,true,0))
SELECT Sector
FROM Table1
WHERE Name IN ( 'Name1' , 'Name2') AND LaDate = #27/10/2021#
GROUP BY Sector
Pivot Name 

方案2:用关联子查询提前引入系数

如果不想分两次执行,可以把系数计算逻辑放在FROM子句中作为临时表关联,避免在聚合参数中嵌套子查询:

TRANSFORM SUM(t1.Rate * SWITCH(t1.Name = 'Name1', t2.coef, t1.Name='Name2',0.75, true,0))
SELECT t1.Sector
FROM Table1 AS t1,
(
  SELECT sum(MktValue)/(select sum(MktValue) FROM Table2 WHERE Portefeuille IN ( 'Name1' , 'Name2') AND LaDate = #27/10/2021#) AS coef
  FROM Table2 WHERE Name IN ( 'Name1') AND LaDate = #27/10/2021#
) AS t2
WHERE t1.Name IN ( 'Name1' , 'Name2') AND t1.LaDate = #27/10/2021#
GROUP BY t1.Sector
Pivot t1.Name

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:27:05