我现在需要从一个表里读取数据,其中有个字段的值是这样的“一级名称_二级名称_三级名称”。
我现在只需要把这个字段的一级名称读取出来。然后按照一级名称排序。
譬如这个字段为a 则
如:Select f1,f2,f3,a from table order by a得到如下结果
1,1,1,一级名称
2,22,2,一级名称
3,2,11,一级名称
12,31,41,一级名称
11,12,71,一级名称结果是按照“一级名称”来排序的。
可以在一个SQL语句中实现这个吗?怎么弄

解决方案 »

  1.   

    可是要这个东西?CREATE TABLE A(id INT,country VARCHAR(100))
    INSERT A
    SELECT 1,'中国;日本;韩国' UNION ALL
    SELECT 2,'美国;意大利;法国' UNION ALL
    SELECT 3,'德国'
    SELECT * FROM A-- 建立一个辅助的临时表就可以了
    SELECT TOP 8000 id = identity(int,1,1) 
    INTO # FROM syscolumns a, syscolumns b    
    SELECT 
        A.ID, 
        COUNTRY = SUBSTRING(A.COUNTRY, B.ID, CHARINDEX(';', A.COUNTRY + ';', B.ID) - B.ID) 
    FROM A, # B
    WHERE SUBSTRING(';' + a.COUNTRY, B.id, 1) = ';'   
    ORDER BY 1,2
    GODROP TABLE A,#id          country         
    ----------- ----------------
    1           中国;日本;韩国
    2           美国;意大利;法国
    3           德国(所影响的行数为 3 行)ID          COUNTRY  
    ----------- ---------
    1           韩国
    1           日本
    1           中国
    2           法国
    2           美国
    2           意大利
    3           德国(所影响的行数为 7 行)
      

  2.   

    --好像没有必要.这样即可.Select f1,f2,f3,a='一级名称' from table where charindex('一级名称',a) > 0 order by a
      

  3.   

    --try
    select f1,f2,f3,left(A,charindex('_',A)-1)
    from 表名 
    order by left(A,charindex('_',A)-1)
      

  4.   

    --上面的SQL语句被CSDN自动加空格了,用如下:select f1,f2,f3,left(A,charindex('_',A)-1)
    from 表名 
    order by left(A,charindex('_',A)-1)
      

  5.   

    to :wangtiecheng 
    你真牛。
      

  6.   

    to :wangtiecheng  
    顺便再问一下,如果要取二级名称,该怎么弄呢?