sql的排序问题(150分)

  • 主题发起人 主题发起人 cold-fish
  • 开始时间 开始时间
C

cold-fish

Unregistered / Unconfirmed
GUEST, unregistred user!
在下面的SQL语句里,IN里面的参数是动态生成的,我要让生成的数据集按我的顺序排
如果SQL语句是下面这样,就该是排成3、10、5......可是生成的数据集却是3、5、10
请问我该如何写才能达到我的要求呢
字段ProductID为索引字段!
sql="select ProductID,prdName from tproducts where ProductID in ('3','10','5',....)"
 
order by ProductID
 
呵呵,我想到一个方法。
生成sql语句时用union.
即每动态生成In里面的一个参数时,生成一句sql
最后是:
select ProductID,prdName from tproducts where ProductID=3
union
select ProductID,prdName from tproducts where ProductID=10
union
select ProductID,prdName from tproducts where ProductID=5
 
你的in参数是随机排列的,你想让得到的记录也随机排列,用order by 显然不行.
sportman的方法应该可以,但参数多了效率肯定低,
给你提供一个思路
你将这些随机的in参数放入一个临时表中
Orders
Order int,
ProductId char(10)

然后你将ProductId依次放入此表中,并按顺序自动生成order的字段值
即,
Order ProductId
1 3
2 10
3 5
...

这样不就简单了吗
select ProcductId,prdName from tProducts a,Order b where a.ProductId =b.ProductId
order by b.Order
 
TO sportsman:
我的参数是从一个表里取出来的用一个函数把整个字符串分成'3','10','5'....
所以你的方法不方便吧,如果可以,怎么写?
 
我赞成sportsman的方法.不知你所要的'3','10','5'是在表中有呢还是其它....,也不知
是要在程序中实现还是在SQL的过程中实现?
 
用chinaplate的方法可以实现!
 
sql="select * from (select ProductID,prdName from tproducts
where ProductID in ('3','10','5',....)) a order by a.ProductID"
 
<<我的参数是从一个表里取出来的用一个函数把整个字符串分成'3','10','5'....

您参数的原来形式是什么??
如果是一个字符串能分成'3','10','5'....,相信也可以拼接成我给的sql形式.
如果是一个结果集,用rs.movenext也可以拼接阿~
 
我试下,TO sportsman:
你已经给我答过很多问题了,为了表示对你的感激我会另开个帖子送分的:)
其实其他人说的也行,不过我不想改数据库结构,改动后我的工作量要大很多啊
我要的是能直接用SQL语句达到我的要求
 
呵呵,谢谢你给我那么多分 :)
 
好象还是不行啊,得到的还是按productid的大小排序
我的参数是从一个字段里读出来的,原始形式是'2','10','8',.....
把这些数分割开后用union在query analyzer得到的还是按大小排!
 
呵呵,不好意思阿 :)~~~
好像是这样!
不过不要紧,可以解决的 :)
 
select ProductID,prdName,1 as SortID from tproducts where ProductID=3
union
select ProductID,prdName,2 as SortID from tproducts where ProductID=10
union
select ProductID,prdName,3 as SortID from tproducts where ProductID=5
order by SortID
其中SortID可以循环生成
 
呵呵,这次总算可以了,真不好意思,SQL语句知识这么差,看来有必要学习一下了
各位可以介绍一下学习SQL的好资料或者网站之类的吗?也要一些T-SQL的!
 
多人接受答案了。
 
后退
顶部