我在这做错了什么?我收到此错误:
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,
qvalues.rid
FROM batchinfo JOIN qvalues ON batchinfo.rowid=qvalues.rowid
WHERE LEN(datapath)>4
GROUP BY 1,2,3
HAVING rid!=MAX(rid)
Run Code Online (Sandbox Code Playgroud)
我想按第一列,第二列和第三列进行分组.
没有团体和没有,它工作正常.
Cad*_*oux 25
首先,你不能这样做:
having rid!=MAX(rid)
Run Code Online (Sandbox Code Playgroud)
HAVING子句只能包含聚合组属性的内容.
另外,1, 2, 3在SQL Server中的GROUP BY中无效 - 我认为这仅在ORDER 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
Run Code Online (Sandbox Code Playgroud)
Lam*_*mak 16
好吧,正如之前所说,你不能通过GROUP文字,我认为你很困惑,因为你可以ORDER通过1,2,3.当你使用函数作为你的列时,你需要GROUP by相同的表达式.此外,HAVING子句是错误的,你只能使用agreggations中的内容.在这种情况下,您的查询应如下所示:
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) MaxRid
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
Run Code Online (Sandbox Code Playgroud)
Fem*_*ref 12
您不能按文字分组,只能按列分组.
你可能正在寻找这样的东西:
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) as pathinfo,
qvalues.name,
qvalues.compound,
qvalues.rid
from batchinfo join qvalues on batchinfo.rowid=qvalues.rowid
where LEN(datapath)>4
group by pathinfo, qvalues.name, qvalues.compound
having rid!=MAX(rid)
Run Code Online (Sandbox Code Playgroud)
首先,你必须给第一个表达式一个列名as.然后,您必须按表达式指定组中列的名称.