有一张表,字段有4个,新闻ID,新闻标题,新闻作者,新闻内容
                   数据内容是:a,c,d,f
                              ab,d,d,f
                              c,a,d,
                              ac,b,
要求是:1.按照数据表中的数据长度来排序(字段最少的排在最前面,如第四条数据就在最前面),
       2.新闻的id必须有a的排在最前面

解决方案 »

  1.   

    SELECT * FROM tb
    ORDER BY 
        CASE WHEN 新闻ID IS NOT NULL THEN 1 ELSE 0 END
       +CASE WHEN 新闻标题 IS NOT NULL THEN 1 ELSE 0 END
       +CASE WHEN 新闻作者 IS NOT NULL THEN 1 ELSE 0 END
       +CASE WHEN 新闻内容 IS NOT NULL THEN 1 ELSE 0 END,
       CASE WHEN CHARINDEX('a',新闻ID) > 0 THEN 0 ELSE 1 END,
       新闻ID;
      

  2.   

    order by  cast(新闻ID as char(1)),len(新闻ID)
      

  3.   

    declare @A table (新闻id nvarchar(10),新闻标题 nvarchar(10),新闻作者 nvarchar(10),新闻内容 nvarchar(10))
    insert into @A select 'a','c','d','f'
       union all   select 'ab','d','d','f'
       union all   select 'c','a','d',null
       union all   select 'ac','b',null,null
    select * from @A 
        order by  case when 新闻id is null then 1 else 5 end,
                  case when 新闻标题 is null then 1 else 5 end,
                  case when 新闻作者 is null then 1 else 5 end,
                  case when 新闻内容 is null then 1 else 5 end,
                  case when  CHARINDEX('a',新闻id )>0 then 2 else 3 end  
     
    新闻id       新闻标题       新闻作者       新闻内容
    ---------- ---------- ---------- ----------
    ac         b          NULL       NULL
    c          a          d          NULL
    a          c          d          f
    ab         d          d          f(4 行受影响)