Sql 使用派生表时出现列无效错误
我使用ROW_NUMBER和一个派生表从派生表结果中获取数据 但是,我收到一条错误消息,告诉我GROUPBY子句中没有相应的列 以下是错误: 列“TBLComption.objID”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中 我缺了什么栏目?还是我做错了什么?在下面查找不工作的查询,以及正在工作的更简单的查询 SQL Server 2008 不起作用的查询:Sql 使用派生表时出现列无效错误,sql,sql-server,Sql,Sql Server,我使用ROW_NUMBER和一个派生表从派生表结果中获取数据 但是,我收到一条错误消息,告诉我GROUPBY子句中没有相应的列 以下是错误: 列“TBLComption.objID”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中 我缺了什么栏目?还是我做错了什么?在下面查找不工作的查询,以及正在工作的更简单的查询 SQL Server 2008 不起作用的查询: SELECT objID, objTypeID, userID, da
SELECT
objID,
objTypeID,
userID,
datAdded,
count,
sno
FROM
(
SELECT scc.objID,scc.objTypeID,scc.userID,scc.datAdded,
COUNT(sci.favID) as count,
ROW_NUMBER() OVER(PARTITION BY scc.userID ORDER BY scc.unqID DESC) as sno
FROM tblCompetition scc
LEFT JOIN tblFavourites sci
ON sci.favID = scc.objID
AND sci.datTimeStamp BETWEEN @datStart AND @datEnd
) as t
WHERE sno <= 2 AND objTypeID = @objTypeID
AND datAdded BETWEEN @datStart AND @datEnd
GROUP BY objID,objTypeID,userID,datAdded,count,sno
正在运行的简单查询:
SELECT objId,objTypeID,userId,datAdded FROM
(
SELECT objId,objTypeID,userId,datAdded,
ROW_NUMBER() OVER(PARTITION BY userId ORDER BY unqid DESC) as sno
FROM tblResdagbokenCompetition
) as t
WHERE sno<=2 AND objtypeid=@objTypeID
AND datAdded BETWEEN @datStart AND @datEnd
谢谢大家! 在GROUPBY子句中不能有count。事实上,当group by中有其他字段时,将导出计数。在您使用的最内层查询中,按从组中删除计数。
COUNT(sci.favID) as count,
它是一个聚合,您可以选择其他非聚合列
我相信你想要的是分析计数:
在子查询中需要GROUP BY,因为这是聚合的位置:
SELECT
objID,
objTypeID,
userID,
datAdded,
count,
sno
FROM
(
SELECT scc.objID,scc.objTypeID,scc.userID,scc.datAdded,
COUNT(sci.favID) as count,
ROW_NUMBER() OVER(PARTITION BY scc.userID ORDER BY scc.unqID DESC) as sno
FROM tblCompetition scc
LEFT JOIN tblFavourites sci
ON sci.favID = scc.objID
AND sci.datTimeStamp BETWEEN @datStart AND @datEnd
GROUP BY scc.objID,scc.objTypeID,scc.userID,scc.datAdded) as t
WHERE sno <= 2 AND objTypeID = @objTypeID
AND datAdded BETWEEN @datStart AND @datEnd
SELECT
objID,
objTypeID,
userID,
datAdded,
count,
sno
FROM
(
SELECT scc.objID,scc.objTypeID,scc.userID,scc.datAdded,
COUNT(sci.favID) as count,
ROW_NUMBER() OVER(PARTITION BY scc.userID ORDER BY scc.unqID DESC) as sno
FROM tblCompetition scc
LEFT JOIN tblFavourites sci
ON sci.favID = scc.objID
AND sci.datTimeStamp BETWEEN @datStart AND @datEnd
GROUP BY scc.objID,scc.objTypeID,scc.userID,scc.datAdded) as t
WHERE sno <= 2 AND objTypeID = @objTypeID
AND datAdded BETWEEN @datStart AND @datEnd