Mysql 按ORDERBY子句排列的IF语句

Mysql 按ORDERBY子句排列的IF语句,mysql,sql,reporting-services,report,Mysql,Sql,Reporting Services,Report,我正在为在ORDERBY子句中获取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 说我缺少一个关键词。如果你需要

我正在为在ORDERBY子句中获取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\u item\u no字段不是0,它遵循第一个排序顺序,如果是0,我使用不同的排序顺序。

您可以计算出前两列。然后对其余列使用
大小写

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) 
按父目录说明、列号订购,
(列项目编号为0,然后spc.attr值结束时的情况),
(当列项目号为0时,则列项目号为结束)

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

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