如何使用 case 语句对子选择的结果进行排序

Posted

技术标签:

【中文标题】如何使用 case 语句对子选择的结果进行排序【英文标题】:How to order a result of a sub-select with a case statement 【发布时间】:2016-06-15 16:01:26 【问题描述】:

我正在努力使这个SELECT 工作但没有成功。子选择工作正常,但我也需要使用 case 语句对结果进行排序,我不知道是否可以这样做。

SELECT * 
FROM (SELECT DISTINCT TYPE, MAX(DATE) FROM  TABLE1 WHERE USER = '61616161N' GROUP BY TYPE 
ORDER BY MAX(DATE) DESC, TYPE)
GROUP BY STATUS
ORDER BY
CASE 
WHEN STATUS = 'REC' THEN 1 
WHEN STATUS  = 'LEI' THEN 2 
END

我不知道我是否足够具体,如果我可以像这样在一个选择中完成它会很好......如果可以通过解决方法完成它也可以。

【问题讨论】:

感谢您的编辑.. 我什至无法格式化此文件:_\ “REC”和“LEI”是唯一可能的值吗? 不是唯一可能的,但我想在这种情况下评估的唯一 发布的查询有什么问题? 不起作用,我忘记发布代码错误,但它是关于 sintax 的。我明天早上会做,对此感到抱歉 【参考方案1】:

您不会从内部 SELECT 中返回 STATUS 列,因此您不能在 GROUP BY 或 ORDER BY 子句中使用它。 使内部查询返回 STATUS 列是解决方案。

【讨论】:

谢谢你,Michael,我开始发现我遇到的一些错误,但仍在尝试以正确的方式进行操作,谢谢【参考方案2】:

不确定你到底想要什么,但下面会运行——是你想要的吗?

SELECT STATUS, MAX(TYPE), MAX(MDATE)
FROM (
  SELECT CASE 
           WHEN STATUS = 'REC' THEN 1 
           WHEN STATUS = 'LEI' THEN 2
           ELSE 3 
         END AS STATUS,
         TYPE,
         MDATE
  FROM (
    SELECT TYPE, MAX(DATE) AS MDATE 
    FROM  TABLE1 
    WHERE USER = '61616161N' 
    GROUP BY TYPE 
  ) X
) Y
GROUP BY STATUS
ORDER BY STATUS ASC, 

【讨论】:

"STATUS" 在使用它的上下文中无效。 SQL 代码:-206,SQL 状态:42703,这就是我的输出,但非常感谢您的回答,它让我对我能做什么有了一些看法 听起来你打错字了...你输入的和我一样吗?

以上是关于如何使用 case 语句对子选择的结果进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何从我的结果中删除 CASE 语句?

如何按特定列值的前导整数对子数组进行排序?

使用 Case 语句的具有多列的 Order By 子句

如何使用 JPA Criteria API / Hibernate 按 Case 语句分组

XSLT 对子子元素进行排序

SQL Server 2012:如何在 @Var 前后使用文字在 Case 语句中显示 @Var 结果