Mysql 按ORDERBY子句排列的IF语句
我正在为在ORDERBY子句中获取if语句或case语句的语法而苦苦挣扎 这是我目前的代码: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 说我缺少一个关键词。如果你需要
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