update dbo.Sheet1$ set F01 = 0 where ID in(
select top 3 ID from dbo.Sheet1$ where ID in(
select ID, ISNULL(F01,0) + ISNULL(F02,0) + ISNULL(F03,0) as RowSum
from dbo.Sheet1$ where F01 = 1 AND F02 = 1 order by RowSum desc))
运行此代码我收到错误消息:
Msg 1033,Level 15,State 1,Line 1 ORDER BY子句无效 视图,内联函数,派生表,子查询和公用表 表达式,除非还指定了TOP,OFFSET或FOR XML。
我可以编写另一个与上述查询完全相同的查询吗?
答案 0 :(得分:1)
您的查询比没有采样的订购有更多问题。例如,当您在IN ()
谓词中使用子查询时,它不能返回超过1列,而您返回2列。
检查一下,也许我猜错了:
update dbo.Sheet1$ set F01 = 0
where ID in (
select top 3 ID
from dbo.Sheet1$
where F01 = 1 AND F02 = 1
order by ISNULL(F01,0) + ISNULL(F02,0) + ISNULL(F03,0) desc
);
答案 1 :(得分:0)
错误的两个可能原因是:
1)您的子查询具有条件IN,它尝试在子查询中查找2列,而在查询IN时只能有1列
2)您的子查询不能使用Order By,因为无论您是否要进行排序,它都会查找子查询结果集中的匹配记录并更新记录。因此,在子查询中使用Order By没有任何意义。无论您是在子查询中保留Order By还是删除Order By,它都会为您提供相同的输出。
希望这有帮助!