Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用派生表时出现列无效错误_Sql_Sql Server - Fatal编程技术网

Sql 使用派生表时出现列无效错误

Sql 使用派生表时出现列无效错误,sql,sql-server,Sql,Sql Server,我使用ROW_NUMBER和一个派生表从派生表结果中获取数据 但是,我收到一条错误消息,告诉我GROUPBY子句中没有相应的列 以下是错误: 列“TBLComption.objID”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中 我缺了什么栏目?还是我做错了什么?在下面查找不工作的查询,以及正在工作的更简单的查询 SQL Server 2008 不起作用的查询: SELECT objID, objTypeID, userID, da

我使用ROW_NUMBER和一个派生表从派生表结果中获取数据

但是,我收到一条错误消息,告诉我GROUPBY子句中没有相应的列

以下是错误:

列“TBLComption.objID”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中

我缺了什么栏目?还是我做错了什么?在下面查找不工作的查询,以及正在工作的更简单的查询

SQL Server 2008

不起作用的查询:

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