Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Chaque expression GROUP BY doit contenir au moins une colonne qui n'est pas une référence externe

Pour commencer, vous ne pouvez pas faire ceci :

having rid!=MAX(rid)

La clause HAVING ne peut contenir que des éléments qui sont des attributs des groupes agrégés.

De plus, 1, 2, 3 n'est pas valide dans GROUP BY dans SQL Server - je pense que ce n'est valide que dans ORDER BY.

Pouvez-vous expliquer pourquoi ce n'est pas ce que vous recherchez :

select 
LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1),
qvalues.name,
qvalues.compound,
MAX(qvalues.rid)
 from batchinfo join qvalues on batchinfo.rowid=qvalues.rowid
where LEN(datapath)>4
group by LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1),
qvalues.name,
qvalues.compound