CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

请教select排序 及 存储过程中 参数 的处理

楼主gracecode()2006-10-28 10:54:50 在 MS-SQL Server / 基础类 提问

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

1 楼dawugui(潇洒老乌龟)回复于 2006-10-28 10:57:02 得分 0

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  
   
   
  Top

2 楼bjgzxx(食人一族)回复于 2006-10-28 11:04:08 得分 0

楼上正解Top

3 楼playwarcraft(时间就像乳沟,挤挤还是有的)回复于 2006-10-28 11:05:13 得分 15

樓上的不對的...  
  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   descTop

4 楼playwarcraft(时间就像乳沟,挤挤还是有的)回复于 2006-10-28 11:09:19 得分 5

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

5 楼xyxfly(All things are difficult before they are easy.)回复于 2006-10-28 11:12:23 得分 5

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

6 楼gracecode()回复于 2006-10-28 11:21:17 得分 0

可能用词不当,“可选参数”在这儿想表达的是:如果能接收到这个参数就用它,要是调用这个存储过程的那方   没有   给我传来这个参数,那就不用它。  
  谢谢。Top

7 楼playwarcraft(时间就像乳沟,挤挤还是有的)回复于 2006-10-28 11:37:01 得分 5

可能用词不当,“可选参数”在这儿想表达的是:如果能接收到这个参数就用它,要是调用这个存储过程的那方   没有   给我传来这个参数,那就不用它。  
  谢谢。  
  -----------------------------------------------------------  
  用上面那個賦默認的方法,好像也可以搞了?Top

8 楼xyxfly(All things are difficult before they are easy.)回复于 2006-10-28 12:00:43 得分 5

如果能接收到这个参数就用它,要是调用这个存储过程的那方   没有   给我传来这个参数,那就不用它。  
   
  搜了没?呵呵,就可以搞定你的问题啊  
  Top

9 楼dssw(易腾软件--开发软件的软件 http://www.etoward.com/)回复于 2006-10-28 12:16:48 得分 5

如果没有参数判断一下  
  存储过程好像没有可选参数这一说。Top

10 楼gracecode()回复于 2006-10-28 12:18:12 得分 0

^_^       搜了,正在看。谢谢。     这贴先不结先,担心看后还有不明白的,还想再请教。Top

11 楼dssw(易腾软件--开发软件的软件 http://www.etoward.com/)回复于 2006-10-28 12:20:39 得分 0

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

12 楼Hopewell_Go(好的在后頭﹗希望更好﹗﹗)回复于 2006-10-28 12:43:25 得分 5

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

13 楼Hopewell_Go(好的在后頭﹗希望更好﹗﹗)回复于 2006-10-28 12:48:33 得分 15

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   1Top

14 楼xyxfly(All things are difficult before they are easy.)回复于 2006-10-28 13:16:55 得分 0

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

15 楼gracecode()回复于 2006-10-28 13:28:05 得分 0

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   ”这么句话的意思是什么呢??  
   
  Top

16 楼xyxfly(All things are difficult before they are easy.)回复于 2006-10-28 13:40:26 得分 5

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

17 楼xyxfly(All things are difficult before they are easy.)回复于 2006-10-28 13:40:55 得分 0

打错了,是联机帮助     -_-Top

18 楼gracecode()回复于 2006-10-28 14:02:02 得分 0

嗯,看语句我也是这么想的,可是:  
   
  假设   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  
  ------------------------  
  能解释一下不?谢谢   ^_^  
   
  Top

19 楼xyxfly(All things are difficult before they are easy.)回复于 2006-10-28 14:08:15 得分 0

2不应该排在1后面吗?  
   
   
  还是自己多摸索摸索吧,呵呵,不能一有问题就问,当然,如果想不出来来这里讨论讨论也不错  
   
  呵呵,说的不对请见谅Top

20 楼xyxfly(All things are difficult before they are easy.)回复于 2006-10-28 14:11:27 得分 5

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',1  
   
  select   *   from   test   order   by   b,a  
  --------------------  
  A                     B                        
  ----------   -----------    
  A                     1  
  B                     1  
  C                     1  
  D                     1  
  NULL               2  
  NULL               2Top

21 楼xyxfly(All things are difficult before they are easy.)回复于 2006-10-28 14:12:02 得分 0

上面的例子明白?Top

22 楼playwarcraft(时间就像乳沟,挤挤还是有的)回复于 2006-10-28 14:19:08 得分 0

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

23 楼playwarcraft(时间就像乳沟,挤挤还是有的)回复于 2006-10-28 14:21:31 得分 10

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

24 楼gracecode()回复于 2006-10-28 14:27:32 得分 0

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

25 楼xyxfly(All things are difficult before they are easy.)回复于 2006-10-28 14:59:29 得分 0

-_-Top

26 楼lsd1025()回复于 2006-10-29 11:09:22 得分 0

学习了一下,Top

相关问题

关键词

得分解答快速导航

  • 帖主:gracecode
  • playwarcraft
  • playwarcraft
  • xyxfly
  • playwarcraft
  • xyxfly
  • dssw
  • Hopewell_Go
  • Hopewell_Go
  • xyxfly
  • xyxfly
  • playwarcraft

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo