sql >> Base de Datos >  >> RDS >> Sqlserver

Cada expresión GROUP BY debe contener al menos una columna que no sea una referencia externa

Para empezar, no puedes hacer esto:

having rid!=MAX(rid)

La cláusula HAVING solo puede contener cosas que son atributos de los grupos agregados.

Además, 1, 2, 3 no es válido en GROUP BY en SQL Server; creo que solo es válido en ORDER BY.

¿Puede explicar por qué esto no es lo que está buscando?

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