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