首页 > 解决方案 > SQL:ORDER BY 语句中的嵌套大小写

问题描述

我正在尝试将 case 语句嵌套到查询的 ORDER BY 部分中的另一个中。这是我得到的:

ORDER BY 

CASE WHEN v.Interior = 'MEL (White - 113)' AND v.Interior = 'MEL 290 (Maple)' 
THEN v.[Finish] ELSE

( CASE
        WHEN v.[Item] like 'Adjustable%'  THEN v.[Item]                 
        WHEN v.[Item] Like 'Fixed%'       THEN v.[Item]
        WHEN v.[Item] like '%Divider%'    THEN v.[Item]
        END DESC)

,v.[Finish], v.[W mm] DESC

END

但是这样做会给我一个错误。我也试过:

ORDER BY 

CASE WHEN v.Interior = 'MEL (White - 113)' AND v.Interior = 'MEL 290 (Maple)' 
THEN v.[Finish] END

,CASE
        WHEN v.[Item] like 'Adjustable%'  THEN v.[Item]         
        WHEN v.[Item] Like 'Fixed%'       THEN v.[Item]
        WHEN v.[Item] like '%Divider%'    THEN v.[Item]
        END DESC

,v.[Finish], v.[W mm] DESC

但这并没有按照我需要的方式排序结果。

这是修复错误后得到的结果:

在此处输入图像描述

但是上面的结果不服从第一个case语句。我也不能按 LEVEL 排序,因为当我将结果导出到另一个程序时会导致问题。

有人知道如何解决这个问题吗?

提前感谢您的帮助!

标签: sqlsql-serversql-server-2008

解决方案


在这两个查询之间,您修复了一个问题,但又创建了另一个问题。最好一次只改变一件事。

尝试这个:

ORDER BY 

CASE 
  WHEN v.Interior = 'MEL (White - 113)' AND v.Interior = 'MEL 290 (Maple)' 
  THEN v.[Finish] 
  ELSE CASE
        WHEN v.[Item] like 'Adjustable%'  THEN v.[Item]                 
        WHEN v.[Item] Like 'Fixed%'       THEN v.[Item]
        WHEN v.[Item] like '%Divider%'    THEN v.[Item]
        ELSE NULL --need to have some default if all cases are false.
  END DESC
END   
,v.[Finish], v.[W mm] DESC

这至少应该不会出错,但是从您的问题中的尝试中不清楚它是否符合您的要求。


推荐阅读