【问题标题】:Why is this ORDER BY Clause in SQL Statement not working为什么 SQL 语句中的 ORDER BY 子句不起作用
【发布时间】:2021-11-04 14:43:55
【问题描述】:

我在应用程序中遇到了旧代码。 ORDER BY 在这里不起作用。从执行计划看,ORDER BY 好像根本没有执行。

IF(1 = 1)
(
SELECT * FROM dbo.Table WHERE   Column1= 'abc' 
)
ELSE
(
SELECT * FROM dbo.Table 
)



ORDER BY Column2

我知道我可以通过像这样重构这个查询来让它工作。 但我只是好奇为什么 ORDER BY 没有在上述查询中首先被执行。

IF(1 = 1)
BEGIN
SELECT * FROM dbo.Table WHERE Column1= 'abc'  ORDER BY Column2
END
ELSE
BEGIN
SELECT * FROM dbo.Table ORDER BY Column2
END 

【问题讨论】:

  • IF 是逻辑流运算符,不能像这样在单个SELECT 语句中使用。
  • 还有,SQL Server 2005?真的吗?这 long 不支持了;以及很久以前的升级时间

标签: sql sql-server sql-server-2012


【解决方案1】:

ORDER BY 正在工作,但仅适用于ELSE 子句。 SQL Server 允许这种语法:

(SELECT * FROM dbo.Table )
ORDER BY Column2

这就是代码的解释方式。 ORDER BYELSE 的一部分。我应该指出IF 条件为真,所以正在执行的是THEN 查询。

【讨论】:

    【解决方案2】:

    您可以使用UNION ALL 代替IF

    SELECT * FROM dbo.Table WHERE 1 = 1 AND Column1= 'abc' 
    UNION ALL
    SELECT * FROM dbo.Table WHERE NOT (1 = 1)
    ORDER BY Column2
    

    (此处不存在,但可能需要处理 IF 条件空值 也是。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      相关资源
      最近更新 更多