SQL订购查询

时间:2012-09-22 07:47:59

标签: sql

大家好,请看下面的表格

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

我该怎么做?

1 个答案:

答案 0 :(得分: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

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

我做了几个假设:

  1. 数值总是从结尾开始5个字符
  2. 当字段值中存在数值时,前缀(即Banaskantha)与' - '之间以及' - '与数值之间始终存在空格
  3. 当字段值中没有数字值时,前缀和后缀之间没有空格。
  4. 如果其中一个假设不正确,请相应地重写SQL语句。

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