【问题标题】:IF statement in ORDER BY clauseORDER BY 子句中的 IF 语句
【发布时间】:2016-01-11 15:30:12
【问题描述】:

我正在为在 order by 子句中获取 if 语句或 case 语句的语法而苦苦挣扎。

这是我当前的代码:

order by 
    case WHEN (col.line_item_no != 0) THEN Parent_Catalog_Desc,
                 col.line_no, spc.attr_value, col.line_item_no ELSE
       Parent_Catalog_Desc, col.line_no END 

说我缺少一个关键字。如果您需要更多上下文,请告诉我。

基本上,如果 line_item_no 字段不是 0,它遵循第一个排序顺序,如果它是 0,我使用不同的排序顺序。

【问题讨论】:

    标签: mysql sql reporting-services report


    【解决方案1】:

    您可以排除前两列。然后为其余列使用CASE

    order by Parent_Catalog_Desc, col.line_no,
             (CASE WHEN col.line_item_no <> 0 THEN spc.attr_value END),
             (CASE WHEN col.line_item_no <> 0 THEN col.line_item_no END) 
    

    CASE 是 SQL 语句中返回单个值的表达式。因此它不能用于返回多个值。

    【讨论】:

      【解决方案2】:

      CASE 语句只返回一个值。您不能在其中包含逗号分隔的列表。您可以尝试连接这些值,但是您需要担心混合数据类型以及将字符串与数字组合起来会如何打乱排序。另一种可能性是使用多个CASE 语句,如下所示:

      ORDER BY
          parent_catalog_desc,
          col.line_no,
          CASE WHEN COL.line_item_no != 0 THEN spc.attr_value ELSE 0 END
          CASE WHEN COL.line_item_no != 0 THEN col.line_item_no ELSE 0 END
      

      【讨论】:

        猜你喜欢
        • 2021-01-21
        • 1970-01-01
        • 2017-04-10
        • 1970-01-01
        • 1970-01-01
        • 2018-06-03
        • 2011-09-07
        • 2018-03-23
        相关资源
        最近更新 更多