ORDER BY子句中的IF语句

时间:2016-01-11 15:30:13

标签: mysql sql reporting-services report

我正在努力学习在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,我使用不同的排序顺序。

2 个答案:

答案 0 :(得分: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语句中的表达式,它返回单个值。因此,它不能用于返回多个值。

答案 1 :(得分:1)

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