Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Jeder GROUP BY-Ausdruck muss mindestens eine Spalte enthalten, die keine äußere Referenz ist

Zunächst können Sie dies nicht tun:

having rid!=MAX(rid)

Die HAVING-Klausel kann nur Dinge enthalten, die Attribute der aggregierten Gruppen sind.

Außerdem 1, 2, 3 ist in GROUP BY in SQL Server nicht gültig - ich denke, das ist nur in ORDER BY gültig.

Können Sie erklären, warum dies nicht das ist, wonach Sie suchen:

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