请问:
1、假设有这么个查询:
SELECT COL1,COL2
FROM DB_TEST
WHERE COL2 = 1现在要对取得的结果根据 COL1 进行排序,要求当 COL1 的内容为空(NULL)时,不管,是按升序还是降序排,NULL都要在最后,这要如何实现呢?2、存贮过程中,可以定义可选参数么?要如何实现呢?

解决方案 »

  1.   

    SELECT COL1,COL2
    FROM DB_TEST
    WHERE COL2 = 1 and col1 is not null
    order by col1
    union all
    SELECT COL1,COL2
    FROM DB_TEST
    WHERE col1 is null
      

  2.   

    樓上的不對的...
    1.
    SELECT COL1,COL2
    FROM DB_TEST
    WHERE COL2 = 1
    --順序
    order by case when col1 is null then 2
             else 1 end,COL1 
    --倒序 
    --order by case when col1 is null then 2
             else 1 end,COL1 desc
      

  3.   

    2.什麼叫可選參數???
    還是指有默認值的參數??
    筆如:
    create proc usp_test
       @a char(01),
       @b char(01)='b'
    as
      print @a+@b
    goexec dbo.usp_test 'a'
    --結果ab
    exec dbo.usp_test 'a','c'
    --結果ac
      

  4.   

    1.楼上正解:)order by case
    2.在baidu里搜“不定参数存储过程”
      

  5.   

    在使用 union 是 不可以有 order by 关键字。
      

  6.   

    --升序
    select * 
    from a
    order by isnull(f2,'zzzzzzzzzzzz')--当为升序时设置为最大的值
    --降序
    select * 
    from a
    order by f2 desc
    --------至于楼主可以传递参数进行动态设置
      

  7.   

    1、假设有这么个查询:
    SELECT COL1,COL2
    FROM DB_TEST
    WHERE COL2 = 1现在要对取得的结果根据 COL1 进行排序,要求当 COL1 的内容为空(NULL)时,不管,是按升序还是降序排,NULL都要在最后,这要如何实现呢?2、存贮过程中,可以定义可选参数么?要如何实现呢?
    create proc test
    @iSortType int--排序类型,0为降序,1为升序
    as
    if(@iSortType=0)--降序
    begin
    SELECT COL1,COL2
    FROM DB_TEST
    WHERE COL2 = 1
    order by col1 desc
    end
    else if(@iSortType=1)--升序
    begin
    SELECT COL1,COL2
    FROM DB_TEST
    WHERE COL2 = 1
    order by isnull(col1,'zzzzzzzzzzzzzzzzz')--这个要看字段定义的数据类型长度
    end
    --测试
    --降序
    exec test 0
    --升序
    exec test 1
      

  8.   

    在使用 union 是 不可以有 order by 关键字。
    这个问题就不用回答了,自己试一下就知道了,呵呵,自己多动手试试
      

  9.   

    SELECT COL1,COL2
    FROM DB_TEST
    WHERE COL2 = 1
    --順序
    order by case when col1 is null then 2
             else 1 end,COL1 
    --倒序 
    --order by case when col1 is null then 2
             else 1 end,COL1 desc
    前边  playwarcraft(时间就像乳沟,挤挤还是有的)  兄弟给的这个方法,调试结果是正确的,可是不明白其中的意思,能够解释一下不?“order by case when col1 is null then 2
             else 1 end,COL1 ”这么句话的意思是什么呢??
      

  10.   

    看连接帮助case when的用法上面的意思是当col1为空设为2,否则设为1,然后按这个排序所以null肯定排在后面了
      

  11.   

    嗯,看语句我也是这么想的,可是:假设 col1 原来的内容为:
    ------------------------
    B
    C
    NULL
    A
    NULL
    D
    ------------------------
    则,执行case 之后是不是就是:
    ------------------------
    B     ---〉   1
    C     ---〉   1
    NULL  ---〉   2
    A     ---〉   1
    NULL  ---〉   2
    D     ---〉   1
    ------------------------
    那这样子的话,它是怎么实现下边这个结果的呢?
    ------------------------
    A
    B
    C
    NULL
    NULL
    ------------------------
    能解释一下不?谢谢 ^_^
      

  12.   

    create table test(A varchar(10), B int)
    insert test
    select 'B',1 union all 
    select 'C',1  union all 
    select NULL,2  union all 
    select 'A',1  union all 
    select NULL,2  union all 
    select 'D',1select * from test order by b,a
    --------------------
    A          B           
    ---------- ----------- 
    A          1
    B          1
    C          1
    D          1
    NULL       2
    NULL       2
      

  13.   

    order by case when col1 is null then 2
             else 1 end
       ,COL1 ----------
    因為後面還有,COL1你沒看到吧,
    是先按case排序(也就是不是NULL的為1排前面,是NULL的為2排後面)
    然後再按COL1本身排.
      

  14.   

    以你給的例子:
    B
    C
    NULL
    A
    NULL
    D
    ------------------
    1.先按case排序
    B
    C
    A
    D
    NULL
    NULL
    2.再按COL1排序
    A
    B
    C
    D
    NULL
    NULL
      

  15.   

    嗯,看了 playwarcraft(时间就像乳沟,挤挤还是有的)  兄的解释,现在明白了。谢谢 xyxfly(天使不敢走的路,傻子一步就能跨过去......)  兄的提醒,我会注意的 :)遇到的问题,在最开始给出处理办法的时候,已经解决了,是不理解其中的意思,所以后边又问了这么多,sorry