Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Cada expressão GROUP BY deve conter pelo menos uma coluna que não seja uma referência externa


Para começar, você não pode fazer isso:
having rid!=MAX(rid)

A cláusula HAVING só pode conter coisas que são atributos dos grupos agregados.

Além disso, 1, 2, 3 não é válido em GROUP BY no SQL Server - acho que só é válido em ORDER BY.

Você pode explicar por que isso não é o que você está procurando:
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