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
相关产品推荐
相关产品推荐

