sql-server - 每个 GROUP BY 表达式必须至少包含一列不是外部引用

标签 sql-server tsql

我在这里做错了什么?我收到此错误:

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)

我想按具有最大删除次数的第一、第二和第三列进行分组。

无需 group by 和having 即可正常工作。

最佳答案

首先你不能这样做:

having rid!=MAX(rid)

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

关于sql-server - 每个 GROUP BY 表达式必须至少包含一列不是外部引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4453517/

相关文章:

sql-server - 将 sql server 查询更改为 sqlite

java - 使用 JOOQ 返回通用插入中的 id

sql-server - "The notification message type <MessageType> was unexpected."由 SSBEA 记录,我的应用程序从未被调用

sql - 存储过程创建后如何执行?

sql - 如何确定数字是 float 还是整数

sql - 选择具有不同 where 条件的同一列

c# - 在 DataBound 之后对 GridView 中的特定列进行排序

sql - 仅当列不为 NULL 时才连接列

sql-server-2008 - 无法将值 NULL 插入到列 '' 中,表列不允许空值。 INSERT 失败。无法执行以下 SQL block

sql - 使用其他表中的多个值的随机更新表