数据库字段sortid 默认为0
0
0
0
1
2
3
我想让他排成
1
2
3
0
0
0
sql里面有没有什么简单的方法,求各位大哥大姐们了

解决方案 »

  1.   

    用LINQvar rows = DataTable.Rows.Select(x => 
        {
            int sortkey = 0;
            sortkey = x["sortid"] == "0"? 2147483647: Convert.ToInt32(x["sortid"]);
            return new { Key = sortkey, Value = x };
        }).OrderBy(x => x.Key).Select(x => x.Value).ToList();
      

  2.   

    先捞取sortid大于0的并按照升序排列放入一个临时表,再捞取sortid小于等于0的数据并按照降序排列放入一个临时表中,最后把这两临时表union all一下就可以实现了
      

  3.   

    CREATE TABLE Test(
    orderBy int NULL,
    info varchar(50) COLLATE Chinese_PRC_CI_AS NULL
    )INSERT INTO test
    select 1,'a'
    UNION ALL
    select 0,'b'
    UNION ALL
    select 3,'c'
    UNION ALL
    select 0,'d'
    UNION ALL
    select 2,'e'
    UNION ALL
    select 4,'f'SELECT *,ROW_NUMBER()OVER(ORDER BY orderby ASC) AS pxid FROM Test WHERE orderby!=0
    UNION ALL
    SELECT *,ROW_NUMBER()OVER(ORDER BY orderby ASC) AS pxid FROM Test WHERE orderby=0
      

  4.   

    刚想出来个办法,效率应该更快,建议参考select * from tablename order by floor(1/(classid+0.1))
    ^_^
      

  5.   


    上面那个 classid字段改成你的sortid字段