【问题标题】:How to use ORDER BY in subqueries如何在子查询中使用 ORDER BY
【发布时间】:2014-09-20 06:35:26
【问题描述】:
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。

我可以编写另一个与上述查询完全相同的查询吗?

【问题讨论】:

标签: sql sql-server sql-server-2008 tsql


【解决方案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
);

【讨论】:

    【解决方案2】:

    2 个可能的错误原因是:

    1) 您的子查询有条件 IN,它试图在子查询中查找 2 列,而您在查询 IN 时只能有 1 列

    2) 您的子查询不能使用 Order By,因为无论您是否要排序,它都会从子查询结果集中查找匹配的记录并更新记录。因此,在子查询中使用 Order By 没有任何意义。无论您是在子查询中保留 Order By 还是删除 Order By,它都会为您提供相同的输出。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      • 2014-06-05
      • 2021-12-18
      相关资源
      最近更新 更多