各位朋友,一个表里面的数据如图1,现在当用户进行排序操作后,希望DBGRIDEH表格可以显示出如图2的排序方法。  图1:  批号 牌号
  0001 2-3
  0001 10-11-12
  0001 4-5
  0001 112-113
  0001 1
  0001 6-7-8
  0001 9
  请问能否将以上的数据,按牌号里面,各个数字的大小来排序,最后的顺序如下  图2:  批号 牌号
  0001 1
  0001 2-3
  0001 4--5
  0001 6-7-8
  0001 9
  0001 10-11-12
  0001 112-113  请各位朋友赐教,多谢!

解决方案 »

  1.   

    直接排不行,你需要处理一下,可以再sql中提出最前面的数字,然后按那个数字排序
      

  2.   


    procedure TFrmGroupManage.FlatRadioButton2Click(Sender: TObject);
    begin
      adoquery1.Sort :='SurName,GivenName';//加入要排序字段
      DBGridEh1.Columns[2].Title.sorter := smupeh;//排序字段对应的Columns,smupeh是升序
      DBGridEh1.Columns[3].Title.sorter := smupeh;//排序字段对应的Columns,smupeh是升序
    end;
    可以这样试一试..
      

  3.   

    select 批号, 牌号 from tb Order by 牌号 Asc
      

  4.   

    嗯,从你的牌号上看,是有规律的
    只要提取前面的数字
    Select *,(牌号+'-')AS 排序列 from Table
    Order by Convert(Int,left(排序列,CHARINDEX('-',排序列)-1))
      

  5.   

    谢谢楼上各位仁兄的热心帮助,是这样的,我用DBGRIDEH,点击标题排序后,发现列出的数字不对,得到举例如图1的数据:
    图1(从大到小排列)
    9
    86
    566
    257
    10
    但应该得到图2才正确图2(从大到小排列)
    566
    257
    86
    10
    9
      

  6.   

    图1那样排,就按字符串排.图2排序是按数据排
    你想怎么排都可以.转换一下类型啊
    前面不是讲了吗,就是用Order By,,我用Convert 转换了一下.
    取出牌号前面的数值,然后再排序
    Select *,(牌号+'-')AS 排序列 from Table 
    Order by Convert(Int,left(排序列,CHARINDEX('-',排序列)-1))是降序或是升序,你加上ASC或Desc,就可以了