条件多列数据库排序

时间:2016-12-01 14:44:58

标签: sql sql-server sorting

我在下面有以下GlobalTax表,我需要按TaxCode排序,但需要使用特定的排序顺序。第一组项目应该是Type column ='F'的第一个字符,然后是'S',最后是'L'

enter image description here

我可以按照这样的类型进行排序:

select TaxCode,
   Type,
    CASE WHEN LEFT(gt.Type, 1) = 'F' THEN 1
         WHEN LEFT(gt.Type, 1) = 'S' THEN 2
         WHEN LEFT(gt.Type, 1) = 'L' THEN 3
    ELSE 4
    END as SortOrder
from GlobalTax gt
order by sortorder

返回:

enter image description here

但是,它不是按TaxCode按字母顺序排序每个集合。 我错过了什么?

这是一个小提琴:http://rextester.com/JGLNP57037

1 个答案:

答案 0 :(得分:2)

只需按以下顺序添加税码:

select TaxCode,
   Type,
    CASE WHEN LEFT(gt.Type, 1) = 'F' THEN 1
         WHEN LEFT(gt.Type, 1) = 'S' THEN 2
         WHEN LEFT(gt.Type, 1) = 'L' THEN 3
    ELSE 4
    END as SortOrder
from GlobalTax gt
order by sortorder, taxcode

您还可以简化case表达式:

select TaxCode,
   Type,
    CASE LEFT(gt.Type, 1)
         WHEN 'F' THEN 1
         WHEN 'S' THEN 2
         WHEN 'L' THEN 3
    ELSE 4
    END as SortOrder
from GlobalTax gt
order by sortorder, taxcode