如何使用 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 语句对子选择的结果进行排序的主要内容,如果未能解决你的问题,请参考以下文章