select isnull(nickname,email) as NickName from UserInfo order by NickName desc 得到的结果如下:我是超人
潘表
[email protected]
[email protected]
testPanny
[email protected]
DSA 
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]我但想要的结果是;[email protected]
我却完全请问
[email protected]
testPanny
潘表
[email protected]
DSA 
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]应该怎么写语句?

解决方案 »

  1.   

    有一个取中文首字母的函数,忘记原著是谁了,贴给楼主参考
    create function   [dbo].[f_GetPy](@str   nvarchar(4000)) 
    returns   nvarchar(4000) 
    as 
    begin 
    declare   @strlen   int,@re   nvarchar(4000) 
    declare   @t   table(chr   nchar(1)   collate   Chinese_PRC_CI_AS,letter   nchar(1)) 
    insert   into   @t(chr,letter) 
        select   '吖 ', 'A '   union   all   select   '八 ', 'B '   union   all 
        select   '嚓 ', 'C '   union   all   select   '咑 ', 'D '   union   all 
        select   '妸 ', 'E '   union   all   select   '发 ', 'F '   union   all 
        select   '旮 ', 'G '   union   all   select   '铪 ', 'H '   union   all 
        select   '丌 ', 'J '   union   all   select   '咔 ', 'K '   union   all 
        select   '垃 ', 'L '   union   all   select   '嘸 ', 'M '   union   all 
        select   '拏 ', 'N '   union   all   select   '噢 ', 'O '   union   all 
        select   '妑 ', 'P '   union   all   select   '七 ', 'Q '   union   all 
        select   '呥 ', 'R '   union   all   select   '仨 ', 'S '   union   all 
        select   '他 ', 'T '   union   all   select   '屲 ', 'W '   union   all 
        select   '夕 ', 'X '   union   all   select   '丫 ', 'Y '   union   all 
        select   '帀 ', 'Z ' 
        select   @strlen=len(@str),@re= ' ' 
        while   @strlen> 0 
        begin 
            select   top   1   @re=letter+@re,@strlen=@strlen-1 
                from   @t   a   where   chr <=substring(@str,@strlen,1) 
                order   by   chr   desc 
            if   @@rowcount=0 
                select   @re=substring(@str,@strlen,1)+@re,@strlen=@strlen-1 
        end 
        return(@re) 
    end order by dbo.f_getpy(NickName) desc
      

  2.   

    --首先准备一个拼音表 
    CREATE TABLE aword( 
    PY varchar(10), 
    ZW nvarchar(10) 
    ) ON [PRIMARY] 
    GO 
    --插入数据 
    insert into aword 
    select 'A',N'骜' 
    union all select 'B',N'簿' 
    union all select 'C',N'错' 
    union all select 'D',N'鵽' 
    union all select 'E',N'樲' 
    union all select 'F',N'鳆' 
    union all select 'G',N'腂' 
    union all select 'H',N'夻' 
    union all select 'J',N'攈' 
    union all select 'K',N'穒' 
    union all select 'L',N'鱳' 
    union all select 'M',N'旀' 
    union all select 'N',N'桛' 
    union all select 'O',N'沤' 
    union all select 'P',N'曝' 
    union all select 'Q',N'囕' 
    union all select 'R',N'鶸' 
    union all select 'S',N'蜶' 
    union all select 'T',N'箨' 
    union all select 'W',N'鹜' 
    union all select 'X',N'鑂' 
    union all select 'Y',N'韵' 
    union all select 'Z',N'咗' 
    GO 
    --建立一个获取拼音首字母的函数 
    create function f_GetPY 

    @str nvarchar(2) 

    returns nvarchar(2) 
    as 
    begin 
    set @str = left(@str, 1) 
    return ( 
    case when unicode(@str) between 19968 and 19968+20901 then( 
    select top 1 PY+'.' from aword where ZW>=@str 
    collate Chinese_PRC_CS_AS_KS_WS order by PY ASC 
    ) else @str end 

    end 
    GO --> 查询结果
    SELECT * FROM t1 Order by dbo.f_GetPY(name)desc