Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ogni espressione GROUP BY deve contenere almeno una colonna che non sia un riferimento esterno

Per cominciare non puoi farlo:

having rid!=MAX(rid)

La clausola HAVING può contenere solo elementi che sono attributi dei gruppi aggregati.

Inoltre, 1, 2, 3 non è valido in GROUP BY in SQL Server - penso che sia valido solo in ORDER BY.

Puoi spiegare perché questo non è quello che stai cercando:

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