-1

大家好,请看我下面的表格

Name
----------
Banaskantha - 66-DV
Banaskantha - 66-MM
Banaskantha-Dv
Banaskantha-MM
Bharuch - 77-RP
Bharuch-RP
hg-SR

但我希望这张表按以下顺序

Name
-------------
Banaskantha-Dv
Banaskantha-MM
Banaskantha - 66-DV
Banaskantha - 66-MM
Bharuch-RP
Bharuch - 77-RP
hg-SR

我怎样才能做到这一点 ?

4

1 回答 1

0

试试下面的 sql 语句:

 SELECT name, 
       case isnumeric(SUBSTRING(name, LEN(name)-4,2))
     when 1 then
             left(name, len(name)-8) + 'z' + RIGHT(name, 2) + '-' + SUBSTRING(name, LEN(name)-4,2)
         else name 
   end as sortby
FROM [your table name]
order by sortby

该查询添加了一个用于排序目的的字段。该字段的值取决于名称字段中是否包含数值。如果是,则将其转换为前缀(即'Banaskantha')+'z'(因此它将低于任何没有后缀的前缀实例)、后缀(即'DV')+数值。如果它没有数值,则保留原始值。

我做了几个假设:

  1. 数值总是从末尾 5 个字符开始
  2. 当字段值中有数值时,前缀(即 Banaskantha)和“-”之间以及“-”和数值之间总是有空格
  3. 当字段值中没有数值时,前缀和后缀之间没有空格。

如果其中一个假设不正确,请相应地重写 SQL 语句。

让我说问题开始是因为字段值没有一致性。在这种情况下,我建议在表中创建一个字段以进行排序,并根据插入和更新触发器填充它。

于 2012-09-22T08:16:22.930 回答