【问题标题】:ORDER BY CASE WHEN: ORDER BY items must appear in the select listORDER BY CASE WHEN:ORDER BY 项目必须出现在选择列表中
【发布时间】:2016-11-14 20:28:52
【问题描述】:

我有这个我正在尝试运行的示例代码。只有表名和列名被更改。我想要做的是有一个状态的结果集,并将“NULL”作为第一个值,其余的结果按升序显示在“NULL”下面,我一辈子都不能让它工作。我在底部得到错误。这可能是一个非常“愚蠢”的问题,但有人可以帮忙吗?非常感谢大家!

SELECT  DISTINCT
    State
FROM    TABLE1 (NOLOCK)
WHERE   COLUMN1 NOT LIKE '%THAT%'
    AND COLUMN1 NOT LIKE '%THIS%'
UNION
SELECT  'NULL'
ORDER BY ( CASE WHEN State = 'NULL' THEN 0
            ELSE 1
       END );   

错误信息:

ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.

【问题讨论】:

  • 您应该通知/标记 rdbms。

标签: sql-order-by union case-when


【解决方案1】:

您需要选择该列...即使您以后不使用它,order by 也要求它出现在选择中。

SELECT  DISTINCT
    State,
 CASE WHEN State = 'NULL' THEN 0
            ELSE 1 END orderId
FROM    TABLE1 (NOLOCK)
WHERE   COLUMN1 NOT LIKE '%THAT%'
    AND COLUMN1 NOT LIKE '%THIS%'
ORDER BY ( CASE WHEN State = 'NULL' THEN 0
            ELSE 1
       END );   

【讨论】:

  • 使用 UNION、INTERSECT 或 EXCEPT 运算符组合的所有查询必须在其目标列表中具有相同数量的表达式。
  • 我需要更新我的答案,为什么您的查询中需要 union null?
  • 我删除了联合...如果返回的数据符合您的预期,请告诉我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
相关资源
最近更新 更多