SQL如何做到不排序?

eloocn 2008-03-06 12:32:25
SQL里好象默认都将SELECT出来的记录都做了排序的,现在有以下的语句:

SELECT * FROM tableName WHERE Class = '0' and Id in (252, 679, 321, 100, 270),我想在SELECT完以后,输出的结果是未排过序(那些id是怎么进来的就怎么排序):

252
679
321
100
270

我应该如何实现这样的效果呢?
...全文
839 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
eloocn 2008-03-07
  • 打赏
  • 举报
回复
太诡异了,麻烦大家再帮我看看这个问题,当我用完美哥的方法,没有任何问题,如下:

strSQL = "SELECT" * FROM tbBusiness WHERE Business_Class_fk = 0 AND Business_Code_pk IN (" + strArrayID + ") order by charindex(','+cast(Business_Code_pk as varchar(20))+',',',1199,1025,1493,1859,569,23,225,1082,93,1512,1581,1433,549,1277,')";

但是当我定义一个变量:
string strArrayID_2 = “,1199,1025,1493,1859,569,23,225,1082,93,1512,1581,1433,549,1277,”;

然后再把SQL改成如下:
strSQL = "SELECT" * FROM tbBusiness WHERE Business_Class_fk = 0 AND Business_Code_pk IN (" + strArrayID + ") order by charindex(','+cast(Business_Code_pk as varchar(20))+',','+strArrayID_2+')";

结果又不对了!!这是什么原因呢?

yesyesyes 2008-03-06
  • 打赏
  • 举报
回复
按聚集索引列排就行
eloocn 2008-03-06
  • 打赏
  • 举报
回复
非常感谢fcuandy, perfectaction和JiangHongTao, 我用了完美哥的方法,问题已经解决了,可惜我现在没有分,等我下辈子有分了一定好好报答你们 :)
JiangHongTao 2008-03-06
  • 打赏
  • 举报
回复
SELECT  * FROM tbBusiness WHERE Business_Class_fk = 0 AND Business_Code_pk IN (“1199,1025,1493,1859,569,225,1581,549,1277") order by charindex(','+ltrim(Business_Code_pk)+',', ',1199,1025,1493,1859,569,225,1581,549,1277,')"
fcuandy 2008-03-06
  • 打赏
  • 举报
回复
不用我多说了.
5楼已经指出来你错在哪了.

1199,....,1277
这一字串,前后少了","
那么
,1199, 与 这一串进行charindex运算时得到 0 ,1277也是一样,所以这两个数的排序不对.
前后加上逗号就可以了.


至于你在7楼所说的出错,应该是你把t-sql和前台开发语言混在一起,这个代码比较乱,看不清是一个双引号还是两个单引号. 自己仔细查一下就看出来了.
nzperfect 2008-03-06
  • 打赏
  • 举报
回复
create table tbBusiness
(Business_Class_fk int,Business_Code_pk int)
insert into tbBusiness select 0,'1199'
union all select 0,'1025'
union all select 0,'1493'
union all select 0,'1859'
union all select 0,'569'
union all select 0,'225'
union all select 0,'1581'
union all select 0,'549'
union all select 0,'1277'

SELECT * FROM tbBusiness WHERE Business_Class_fk = 0 AND Business_Code_pk IN (1199,1025,1493,1859,569,225,1581,549,1277)
order by charindex(','+cast(Business_Code_pk as varchar(20))+',', ',1199,1025,1493,1859,569,225,1581,549,1277,')

drop table tbBusiness
Limpire 2008-03-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 eloocn 的回复:]
To fcuandy:

我使用:SELECT *,charindex(','+ltrim(Business_Code_pk)+',', '1199,1025,1493,1859,569,225,1581,549,1277') FROM tbBusiness where Business_Code_pk in ('1199,1025,1493,1859,569,225,1581,549,1277')

得到如下语法错误:将 varchar 值 '1199,1025,1493,1859,569,225,1581,549,1277' 转换为数据类型为 int 的列时发生语法错误。

能再给点建议吗?谢谢!

[/Quote]
。。。。。。

认真看看1楼是怎么写的
nzperfect 2008-03-06
  • 打赏
  • 举报
回复
create table tbBusiness
(Business_Class_fk int,Business_Code_pk varchar(20))
insert into tbBusiness select 0,'1199'
union all select 0,'1025'
union all select 0,'1493'
union all select 0,'1859'
union all select 0,'569'
union all select 0,'225'
union all select 0,'1581'
union all select 0,'549'
union all select 0,'1277'

SELECT * FROM tbBusiness WHERE Business_Class_fk = 0 AND Business_Code_pk IN ('1199','1025','1493','1859','569','225','1581','549','1277')
order by charindex(','+Business_Code_pk+',', ',1199,1025,1493,1859,569,225,1581,549,1277,')

drop table tbBusiness
---------------------
0 1199
0 1025
0 1493
0 1859
0 569
0 225
0 1581
0 549
0 1277
eloocn 2008-03-06
  • 打赏
  • 举报
回复
To fcuandy:

我使用:SELECT *,charindex(','+ltrim(Business_Code_pk)+',', '1199,1025,1493,1859,569,225,1581,549,1277') FROM tbBusiness where Business_Code_pk in ('1199,1025,1493,1859,569,225,1581,549,1277')

得到如下语法错误:将 varchar 值 '1199,1025,1493,1859,569,225,1581,549,1277' 转换为数据类型为 int 的列时发生语法错误。

能再给点建议吗?谢谢!
fcuandy 2008-03-06
  • 打赏
  • 举报
回复
e,完美哥哥看出来了.
nzperfect 2008-03-06
  • 打赏
  • 举报
回复
SELECT * FROM tbBusiness WHERE Business_Class_fk = 0 AND Business_Code_pk IN (“1199,1025,1493,1859,569,225,1581,549,1277") order by charindex(','+ltrim(Business_Code_pk)+',', '1199,1025,1493,1859,569,225,1581,549,1277')";

--->

SELECT * FROM tbBusiness WHERE Business_Class_fk = 0 AND Business_Code_pk IN (“1199,1025,1493,1859,569,225,1581,549,1277") order by charindex(','+ltrim(Business_Code_pk)+',', ',1199,1025,1493,1859,569,225,1581,549,1277,')";

fcuandy 2008-03-06
  • 打赏
  • 举报
回复
ORDER BY CHARINDEX 这个办法是可行的.
如果楼主你得到结果不对,那么可能要检查你的数据了.可能多了空格,或是有全角字符,或是...

SELECT *,charindex(','+ltrim(Business_Code_pk)+',', '1199,1025,1493,1859,569,225,1581,549,1277') FROM .......
看看,你得到的这个列是什么

eloocn 2008-03-06
  • 打赏
  • 举报
回复
谢谢1楼的同学凌晨2点的回复,我试了下,还是不行啊,详细情况如下:

原始序列:
1199,
1025,
1493,
1859,
569,
225,
1581,
549,
1277

我使用了如下SQL进行排序:
SELECT * FROM tbBusiness WHERE Business_Class_fk = 0 AND Business_Code_pk IN (“1199,1025,1493,1859,569,225,1581,549,1277") order by charindex(','+ltrim(Business_Code_pk)+',', '1199,1025,1493,1859,569,225,1581,549,1277')";

最后的排序结果是:
1025
569
549
225
1859
1581
1493
1277
1199

To 2楼的同学:能稍微详细点吗?我已经没有分了,不能给大家散分,见谅

Limpire 2008-03-06
  • 打赏
  • 举报
回复
SELECT * FROM tableName WHERE Class = '0' and Id in (252, 679, 321, 100, 270)
order by charindex(','+ltrim(Id)+',', ',252,679,321,100,270,')

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧