Sql 按多个键和大小写排序

Sql 按多个键和大小写排序,sql,sql-server,Sql,Sql Server,我有一个如下形式的存储过程 SELECT key1 AS FirstKey, key2 AS SecondKey FROM table ORDER BY CASE @sortOrderParam WHEN 'ASC' THEN CASE UPPER(@sortColumn) WHEN 'blabla' THEN FirstKey WHEN 'blibli' THEN FirstKey, SecondKey --Syntax error

我有一个如下形式的存储过程

SELECT key1 AS FirstKey, key2 AS SecondKey FROM table
ORDER BY
    CASE @sortOrderParam WHEN 'ASC' THEN
        CASE UPPER(@sortColumn)
        WHEN 'blabla' THEN FirstKey
        WHEN 'blibli' THEN FirstKey, SecondKey --Syntax error
        END
    END ASC,
    CASE @sortOrderParam WHEN 'DESC' THEN
    ...
    END DESC
但是,在某些情况下,我在尝试按两列排序时出现语法错误。我该怎么做


谢谢

Case只能返回一个特定值,不能返回一组列。您需要以不同的方式对其进行分解,例如:

SELECT key1 AS FirstKey, key2 AS SecondKey FROM table
ORDER BY
FirstKey, 
CASE @sortOrderParam WHEN 'ASC' THEN
    CASE UPPER(@sortColumn)
    WHEN 'blibli' THEN SecondKey --only relevant when blibli
    END
END ASC,
CASE @sortOrderParam WHEN 'DESC' THEN
...
END DESC

您也可以通过在适当的情况下添加数据来构建排序列。

除非该语句比您显示的更复杂,否则可以在不使用case语句的情况下高效地编写该语句。它稍微复杂一点。如何使它更简单呢?好吧,您的案例陈述按firstKey或firstKey和SecondKey排序;您只需按firstKey、SecondKey进行订购;这也包括按firstKey订购。是的,有效。非常感谢。但正如你所说,我的陈述更为复杂。谢谢你的想法。在你的提案中,ASC/DESC是否也适用于FirstKey?我使用你的附加想法得到了我想要的!谢谢!但我在评论部分提出的上述问题仍然有效。您可以根据需要对任何列单独或以任何组合使用ASC或DESC。如果未指定,则默认值为升序。例如,您可以按价格降序对产品进行排序,但对于价格相同的项目,可以按名称的字母顺序升序进行排序。另一种选择是,如果排序依据变得过于复杂,则向结果集中添加额外的排序列,并使用更简单的排序依据。该列可以按照您需要的方式构建,可以包括任何案例逻辑、子查询等。