【问题标题】:Multi level GROUP BY clause not allowed不允许多级 GROUP BY 子句
【发布时间】:2016-10-27 02:07:09
【问题描述】:

我有以下 CrossTab 查询

TRANSFORM Max(VWDRSSTA.DATUM_ZEIT) AS MaxOfDATUM_ZEIT
SELECT VWDRSSTA.ANTRAGSNUMMER
,IIF(VWDRSSTA.SYSTEM = 'VS', (
        SELECT (Max(VWDRSSTA.DUNKEL)) AS d
        FROM VWDRSSTA
        ), NULL) AS Dunkel
,Max(VWDRSSTA.VERS_NR_INT) AS Versicherungsnummer
 FROM VWDRSSTA
 INNER JOIN V_NAMES ON (VWDRSSTA.SYSTEM = V_NAMES.SYSTEM_CODE)
AND (VWDRSSTA.EREIGNIS = V_NAMES.EREIGNIS)
GROUP BY VWDRSSTA.ANTRAGSNUMMER
ORDER BY VWDRSSTA.ANTRAGSNUMMER
PIVOT V_NAMES.MAPPED_NAME;

这给了我错误“子查询中不允许使用多级 GROUP BY 子句”。我的代码哪里出错了?

【问题讨论】:

  • 代替 Select max(vwdrssta.dunkel) 你可以试试 DMax("dunkel", "vwdrssta") 吗?
  • 我尝试使用 DMax("DUNKEL","VWDRSSTA","SYSTEM ='VS'") AS Dunk 并且它运行但它给了我所有记录的值 1。实际上,Dunkel 字段中只有 0 或 1。对应的字段有VS和ZW。我只想要所有 antragnummers 的 VS 最大值。所以它应该是 0 和 1。
  • Dmax 解决了你最初的问题?,我不明白你的第二个问题。如果您正在寻找“每个”antragsnummer 的最大 VS 值,您应该执行 Dmax("VS", "VWDRSSTA", "[ANTRAGSNUMMER]=outer_vwdrssta.ANTRAGSNUMMER")。将您的 从 vwdrssta 更改为从 vwdssta 作为 outer_vwdrssta
  • dmax 返回最大值,它不能同时返回 0 和 1,正如我所说,我不明白你的情况。也许用证据/可能的输出来改写你的问题!
  • 另一个与您有相同问题的人可能会在阅读您的标题/帖子和答案时感到困惑。因此,合并问题不是一个好主意。保留原来的问题并提出一个新问题。这将对每个人都有帮助。

标签: sql ms-access ms-access-2010


【解决方案1】:

尝试在GROUP BY 子句中使用VWDRSSTA.SYSTEM

它应该可以解决问题。


编辑以详细说明我的答案:

TRANSFORM Max(VWDRSSTA.DATUM_ZEIT) AS MaxOfDATUM_ZEIT
SELECT VWDRSSTA.ANTRAGSNUMMER
    ,IIF(VWDRSSTA.SYSTEM = 'VS', (
            SELECT (Max(VWDRSSTA.DUNKEL)) AS d
            FROM VWDRSSTA
            ), NULL) AS Dunkel
    ,Max(VWDRSSTA.VERS_NR_INT) AS Versicherungsnummer
FROM VWDRSSTA
INNER JOIN V_NAMES ON (VWDRSSTA.SYSTEM = V_NAMES.SYSTEM_CODE)
    AND (VWDRSSTA.EREIGNIS = V_NAMES.EREIGNIS)
GROUP BY VWDRSSTA.ANTRAGSNUMMER, VWDRSSTA.SYSTEM
ORDER BY VWDRSSTA.ANTRAGSNUMMER
PIVOT V_NAMES.MAPPED_NAME;

【讨论】:

  • 它给了我一个错误“您尝试执行的查询不包含指定表达式 'ANTRAGSNUMMER' 作为聚合函数的一部分”。
  • 检查编辑,我的意思是:GROUP BY VWDRSSTA.ANTRAGSNUMMER, VWDRSSTA.SYSTEM
  • 我收到上一个错误“子查询中不允许使用多级 GROUP BY 子句”
  • 卡住了。不能再帮你了。对不起,伙计:(
【解决方案2】:

您的交叉表查询包含辅助“聚合”SQL,这在 ACCESS 交叉表查询中是不允许的。

更改Select max(vwdrssta.dunkel) ... part to DMax("dunkel", "vwdrssta") 将消除该错误消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2016-02-20
    • 2018-03-23
    • 2022-01-13
    • 2015-05-28
    相关资源
    最近更新 更多