假如有一张表ID Name  PY
1  中国  ZG
2  日本  RB
3  XX    null如果按 PY ASC 排序,顺序如下
3 ..
2 ..
1 ..
null 这条记录会排在最前如果想把PY列值为null的放在最后面,应如何写语句

解决方案 »

  1.   

    order by case when PY is null then 2 else 1 end,PY asc
      

  2.   

    写错了,试验了下: ;WITH cte (ID, Name ,PY)AS
    (
    SELECT 1, '中国', 'ZG' UNION all
    SELECT 2, '日本', 'RB' UNION all
    SELECT 3, 'XX',  null
    )
    SELECT * FROM cte
    ORDER BY CASE WHEN py IS NULL THEN '-999' ELSE py END ASC3 XX NULL
    2 日本 RB
    1 中国 ZG
      

  3.   

    select * from tb order by case py is null then 2 else 1 end , py
      

  4.   

    create table tb(ID int,Name varchar(10),PY varchar(10))
    insert into tb values(1 ,'中国', 'ZG')
    insert into tb values(2 ,'日本', 'RB')
    insert into tb values(3 ,'XX'  , null)
    goselect * from tb order by case when py is null then 2 else 1 end , pydrop table tb/*
    ID          Name       PY         
    ----------- ---------- ---------- 
    2           日本         RB
    1           中国         ZG
    3           XX         NULL(所影响的行数为 3 行)
    */
      

  5.   

    ORDER BY CASE WHEN py IS NULL THEN 1 ELSE 0 END,PY ASC放到最后...又看错了...