在SQL中使用select case按Order 2排序

时间:2016-06-27 00:32:27

标签: sql-server sql-server-2008 stored-procedures

如何以适当的SQL Server 2008格式获取此内容?

CREATE PROCEDURE dbo.GetCustomerFleetList_C        
(        
 @FilterBy NVARCHAR(200),        
 @CustCode  NVARCHAR(30)         
)        
AS        

SELECT 
    CASE @FilterBy
    WHEN 'UnitNo' THEN UnitNo
    WHEN 'EquipmentType' THEN EquipmentType
    WHEN 'Registration' THEN Registration
    WHEN 'EquipmentTypeModel' THEN EquipmentType + ' - ' + Model
    ELSE NULL
  END as 'Items' 
  FROM EcommerceCustomerFleet_C 
  WHERE CustomerCode = @CustCode 
  GROUP BY     CASE @FilterBy
    WHEN 'UnitNo' THEN UnitNo
    WHEN 'EquipmentType' THEN EquipmentType
    WHEN 'Registration' THEN Registration
    WHEN 'EquipmentTypeModel' THEN EquipmentType + ' - ' + Model
    ELSE NULL
  END
ORDER BY 
  CASE @FilterBy 
  WHEN 'UnitNo' THEN LEN(UnitNo) 
  WHEN 'EquipmentType' THEN EquipmentType 
  WHEN 'Registration' THEN Registration 
  WHEN 'EquipmentTypeModel' THEN EquipmentType + ' - ' + Model END
GO

问题出在这一行WHEN 'UnitNo' THEN LEN(UnitNo), UnitNo

2 个答案:

答案 0 :(得分:1)

也许您可以将排序移到第一个字段

 Select KeySort = CASE @FilterBy
                  WHEN 'UnitNo' THEN (LEN(UnitNo), UnitNo)
                  WHEN 'EquipmentType' THEN EquipmentType
                  WHEN 'Registration' THEN Registration
                  WHEN 'EquipmentTypeModel' THEN EquipmentType + ' - ' + Model
                  ELSE NULL
                  END
       ,{Other Fields}
 From SomeTable
 Order By 1,SomeOtherField,PerhapsAnother Desc

答案 1 :(得分:0)

我认为你问的是如何排序所以'9'来自'11'之后?并将其与VARCHARS混合使用。如果是这种情况,则需要将这些更改为“000009”和“000011”。所以:

        WHEN 'UnitNo' THEN  REPLICATE('0', 6 - LEN(UnitNo)) + UnitNo