Когда вы используете GROUP BY
, вам также нужно использовать статистические функции для столбцов, не входящих в вашу группу по выражению.
Я не знаю точно, что вы пытаетесь сделать, ноЯ думаю, это будет работать:
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
having
rid!=MAX(rid)
Редактировать: Я пытаюсь сделать здесь group by
со всеми полями, но rid
.Если это не то, что вам нужно, то для того, чтобы иметь действительный оператор SQL, вам нужно добавить агрегированный вызов функции для каждой удаленной группы по полю ...