您的位置:程序门 -> vb -> 数据库(包含打印,安装,报表)



求一个查询语句


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求一个查询语句[已结贴,结贴人:zou_seafarer]
发表于:2007-05-08 11:21:21 楼主
现在有一个表

id             desc          
1                 est        
2                   ms
3                 cs
4                 "   "
5                   tm
6                 cm
要求按照desc排续,小到大       "   "的话就放在最后面
select   *   form   table1   order   by   desc
结果
  4         "   "
1         est
6         cm
3       cs
.....
空desc跑最上面去了

结果应该是
6     cm
3     cs
.....
5     tm
4     "   "
谢谢啦
发表于:2007-05-08 12:23:231楼 得分:0
create   table   t1  

a   int,
b   char(4)
)
create   nonclustered   index   [i2]   on   [dbo].[t1]  

[b]   asc
)   on   [primary]
insert   into   t1(a,b)
select   '1 ', ' '
union   all
select   '2 ', 'mmm '
union   all
select   '3 ', 'nnn '
union   all
select   '4 ', 'aaa '


select   a,b   from   t1   with(index=i2)where   b <> ' '  
union   all
select   a,b   from   t1   where   b= ' '
老大   這個是我的方法
发表于:2007-05-08 12:23:522楼 得分:0
使用index和union   all
发表于:2007-05-08 17:36:023楼 得分:0
可以不用union

select   *   from   table1     order   by   case   isnull(b,   ' ')   when   ' '   then   1   else   0   end,   b
发表于:2007-05-08 17:36:184楼 得分:10
create   table   table1    

a   int,
b   char(4)
)
insert   into   table1   (a,b)
select   1, 'est '
union   all
select   2, 'ms '
union   all
select   3, 'cs '
union   all
select   4, ' '
union   all
select   5, 'tm '
union   all
select   6, 'cm '
go
select   *   from   table1     order   by   case   isnull(b,   ' ')   when   ' '   then   1   else   0   end,   b
go
drop   table   table1  
--result
/*
6 cm    
3 cs    
1 est  
2 ms    
5 tm    
4        
*/
发表于:2007-05-08 17:49:265楼 得分:0
鱼来了

学习了
发表于:2007-05-09 12:39:586楼 得分:0
學習
发表于:2007-05-09 15:45:187楼 得分:0
不用union兵最好了,我还真看不明白!!
select   *   from   table1     order   by   case   isnull(b,   ' ')   when   ' '   then   1   else   0   end,   b
  我比较喜欢
发表于:2007-05-09 15:52:468楼 得分:0
不过请解释一下意思好么!!
发表于:2007-05-09 16:16:349楼 得分:0
sql   =   "select   "
        sql   =   sql   &   "identity(int,1,1)   as   id_sum "   &   "   ,   "
        sql   =   sql   &   tempdatatablename00   &   ".* "   &   "   into   "   &   temp_table
        sql   =   sql   &   "   from   "   &   tempdatatablename00                       'ワークのデータを本番用にコピーするsql
        sql   =   sql   &   "   where   "
        sql   =   sql   &   data_code   &   "   =   "   &   pub_ffileid
'
'         sql   =   sql   &   "   order   by   "   &   data_division   &   "   desc, "
'         sql   =   sql   &   data_divno   &   "   ,   "   &   data_divcheck   &   "   desc "
  '----------------------------------------------------20070509++++++++++++++++++++++++++++++++++++++++
        sql   =   sql   &   "   order   by     case   isnull( "   &   data_division   &   ",   '   ')   when   '   '   then   1   else   0   end,   "   &   data_division   &   ", "
        sql   =   sql   &   data_divno   &   "   ,   "   &   data_divcheck   &   "   desc "
'------------------------------------------------------------+++++++++++++++++++++++++++++++++++++++++

搞不出来,不过没有错误,就是排序没有达到要求,结果很乱
发表于:2007-05-09 16:37:3210楼 得分:0
你可以继续说了
发表于:2007-05-09 16:40:0311楼 得分:0
data_division       的默认是这个值 ' '
发表于:2007-05-09 18:21:3012楼 得分:0
paoluo(一天到晚游泳的鱼)的示例中是插入的 ' '号
而你的题目中应该是 "   "号,所以我觉得你的sql语句不能照搬鱼的示例吧?

或者你这样试试:
select   a,b
from   tb
order   by   case   when   b= ' "   " '   then   b= '1 '+b   else   b= '0 '+b   end

手边没有sql数据库,不知道可行不?
发表于:2007-05-09 19:18:2113楼 得分:0
zou_seafarer(颓废程序员^_^)   (   )   信誉:100         blog       加为好友     2007-05-09   16:40:03     得分:   0    
 
 
      data_division       的默认是这个值 ' '
   
 
--------
默認應該是空吧

try

sql   =   sql   &   "   order   by     case   rtim(isnull( "   &   data_division   &   ",   '   '))   when   ' '   then   1   else   0   end,   "   &   data_division   &   ", "
        sql   =   sql   &   data_divno   &   "   ,   "   &   data_divcheck   &   "   desc "


发表于:2007-05-11 11:15:4514楼 得分:0
学习
发表于:2007-05-11 15:13:2715楼 得分:0
还是没有得到结果,经过提醒,摸索,最后失败了
希望再指点指点
发表于:2007-05-11 16:25:3316楼 得分:20
用你提供的数据,在sql数据库上试过鱼的写法完全正确
我的那个改一下也可以
select   a,b
from   tb
order   by   case   b   when   ' "   " '   then   '1 '+b   else   '0 '+b   end

鱼的排序道理就是先按b字段的值决定一个1或0的数字排序,再按b字段排序
我的这个也是一样的道理,如果b是 "   ",则在原字段前加1,否则加0,这样排序1自然都会在0之后。

因为你实际情况比较复杂,所以你可以从代码里先debug.print你的sql语句,看看有没有什么错误,然后放入查询分析器中去调试
发表于:2007-05-12 12:52:1317楼 得分:0
谢谢   vbman2003(家人)     的详细指点呀

我今天不知道怎么会事用     鱼儿的方法得到结果了,   前几天用他的方法在查询分析器   始终得不到结果!   谢谢啦
发表于:2007-05-12 14:13:3318楼 得分:0
呵呵,不用谢,大家互相学习嘛
发表于:2007-05-12 15:33:0219楼 得分:0
该回复于2007-12-28 18:05:08被管理员或版主删除


快速检索

最新资讯
热门点击