当前位置: 首页 > 面试题库 >

使用不同时的升序,降序和自定义顺序的`Case When`来进行Sql Order By

方弘
2023-03-14
问题内容

我想在一定条件下按折扣对产品进行分类

ORDER BY 
    CASE WHEN @OrderBy = 0
    THEN table.id END ASC,
    CASE WHEN @Orderby = 2
    THEN table.id END ASC,

我要执行以下操作,因为表中没有折扣列

CASE WHEN @OrderBy = 4
THEN (100-((table.price/table.oldprice)*100) as discount END ASC

但这会引发错误-如何按折扣排序


问题答案:

存在很多问题,例如,您不能按顺序对计算字段使用别名,并且您需要转义表名,修复cae,并计算括号。

另外,由于似乎您只想CASE使用一个变量,因此可以将其移至@OrderByCASE的顶部,如下所示:

SELECT * from [table]
ORDER BY 
    CASE @OrderBy
        WHEN  0
            THEN [table].id -- ASC
        WHEN 2
            THEN [table].id * -1 -- DESC
    ---I want to do something like below as I don't have discount column in table
        WHEN 4
            THEN (100-([table].price/[table].oldprice)*100)
    END

SqlFiddle在这里

顺便说一句,如果你需要动态改变ASCDESC列,你可以使用像一个黑客这样通过乘以-1。

(还请注意,这ORDER BY CASE ... END ASC, CASE ... END ASC将设置第一顺序,然后设置第二顺序…鉴于@OrderBy只能具有单个值,这似乎没有意义)



 类似资料:
  • 考虑下面的哈希图: 具有诸如 我需要按值对hashmap进行降序排序,但如果值相等,则按键进行升序排序: 到目前为止,我试着分别按键排序,然后按值排序,但我不相信这种方法。除了创建更多的hashmaps之外,还有什么好方法呢?

  • 我想按第三个和第一个元素对元组数组进行排序,因此我使用了以下代码: 我的问题是,在前面的例子中,我可以按第三个元素和第一个元素的升序排序,也可以按它们的降序排序(使用反向)。但是如何按第三个元素的升序和第一个元素的降序排序。 请在你的回答中考虑以下情况: 在这种情况下,我不知道内部数组的确切大小(取决于我读入该数组的文件模式),我想按侧中的所有项进行排序(一些升序和一些降序)。 编辑:看起来,我明

  • 我正在尝试对我的数组进行升序和降序排序。不过,我似乎不知道如何正确地执行此操作。我尝试了不同的方法,但都不起作用。当我单击两个按钮时,应该会发生这种情况,一个ID为“stigande”升序,一个ID为“ 爪哇语

  • 问题内容: 我正在使用ElasticSearch 2.4.2(通过Java的HibernateSearch 5.7.1.Final)。 我对字符串排序有问题。我的应用程序的语言带有变音符号,它们具有特定的字母顺序。例如,直接在after之后,在after之后,等等。因此,您应该对字符串进行如下排序: ElasticSearch首先按典型字母排序,然后将所有奇怪的字母移到最后: 我可以为Elasti

  • 问题内容: 我正在为我的通讯录应用程序实现排序功能。 我想排序一个。是一个包含四个字段的类:姓名,家庭电话,手机号码和地址。我想继续。 如何编写自定义排序功能来做到这一点? 问题答案: 这是有关订购对象的教程: Java教程-集合-对象排序 尽管我会举一些例子,但我还是建议你阅读它。 有多种排序方式。如果要定义自然的(默认)排序,则需要让实现。假设你想默认在上进行排序name,然后执行(为简单起见

  • 问题内容: 我有一个清单 我想按1. 2. 3.的顺序对其进行排序。 结果: 我在stackoverflow中看到了其他类似的问题,但是没有类似的问题或对我容易适用。 问题答案: 我们在这里所做的全部工作是通过为列表中的每个元素而不是整个列表返回一个整数来提供一个新的元素进行排序。我们 可以 使用内联三元表达式,但这会有点麻烦。