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

MS SQL含MAX CASE的GROUP BY语法错误问题求助

SQL查询错误修正:GROUP BY子句缺失问题

原查询语句

SELECT cKundenNr, cFirma,
MAX(CASE WHEN tAttributSprache.cName = 'Objekt Adresse_A' THEN cWertVarchar else null end) AS "Objektadresse",
MAX(CASE WHEN tAttributSprache.cName = 'Tor Prüftermin_A2' THEN dWertDateTime else null end) AS "Tor Prüftermin"
FROM dbo.tAttribut
JOIN kunde.tKundeEigenesFeld ON kunde.tKundeEigenesFeld.kAttribut = dbo.tAttribut.kAttribut
JOIN tAttributSprache ON tAttributSprache.kAttribut = kunde.tKundeEigenesFeld.kAttribut 
JOIN tkunde ON tkunde.kKunde = kunde.tKundeEigenesFeld.kKunde
JOIN tAdresse ON tAdresse.kKunde = Kunde.tKundeEigenesFeld.kKunde
WHERE cKundenNr = '1121'

错误提示

tcustomer.cCustomerID列在选择列表中无效,因为它不在聚合函数中,也不在GROUP BY子句中。

修正方案

你使用了MAX()聚合函数,根据SQL Server的语法规则:当SELECT列表包含聚合函数时,所有未被聚合的列(此处为cKundenNr和cFirma)必须添加到GROUP BY子句中,确保数据库能按照这些列分组计算聚合值。

修改后的查询语句

SELECT cKundenNr, cFirma,
MAX(CASE WHEN tAttributSprache.cName = 'Objekt Adresse_A' THEN cWertVarchar else null end) AS "Objektadresse",
MAX(CASE WHEN tAttributSprache.cName = 'Tor Prüftermin_A2' THEN dWertDateTime else null end) AS "Tor Prüftermin"
FROM dbo.tAttribut
JOIN kunde.tKundeEigenesFeld ON kunde.tKundeEigenesFeld.kAttribut = dbo.tAttribut.kAttribut
JOIN tAttributSprache ON tAttributSprache.kAttribut = kunde.tKundeEigenesFeld.kAttribut 
JOIN tkunde ON tkunde.kKunde = kunde.tKundeEigenesFeld.kKunde
JOIN tAdresse ON tAdresse.kKunde = Kunde.tKundeEigenesFeld.kKunde
WHERE cKundenNr = '1121'
GROUP BY cKundenNr, cFirma

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:41:06