2011-05-11 77 views
1

我在SQL Server中使用where in条件。我想要得到的结果没有秩序,因为我列出了'在哪里'的情况。SQL Server:无命令选择

例如

select * from blabla where column in ('03.01.KO61.01410', 
'03.02.A081.15002', 
'03.02.A081.15016', 
'03.02.A081.15003', 
'02.03.A081.57105') 

我该怎么办?

+1

您的查询看起来OK。有什么问题? – 2011-05-11 09:35:00

+0

结果应该按照我的情况提到的顺序 – esquare 2011-05-11 09:40:49

回答

1

由于我的经验,SQL Server会随机排序结果为WHERE,按照条款,如果你没有规定如何订购它。

所以,如果你想通过你的WHERE-IN条件来定购,你必须定义一些数据项来在你通过时对它进行排序。否则,SQL Server将随机地对您的结果集进行排序。

2

您已经在使用它 - 如果您没有使用ORDER BY明确指定订单,则没有默认订单。

如果你想完全随机的输出,你可以一个ORDER BY NEWID()子句添加:

SELECT (list of columns) 
FROM dbo.blabla 
WHERE column IN ('03.01.KO61.01410', '03.02.A081.15002', 
        '03.02.A081.15016', '03.02.A081.15003', '02.03.A081.57105') 
ORDER BY NEWID() 
+0

不,我不希望sql排序。因为我在哪里发表了条件清单。它应该作为在哪里。但是SQL根据ASC自动命令它。明白我? – esquare 2011-05-11 09:36:42

+2

除非使用order by,否则RDBMS返回的结果顺序未定义。如果在数据,索引等方面没有任何变化,则可能在相同的时间内以相同的顺序从相同的查询中接收结果。然后有一天,一些变化(数据添加,删除或更新,索引添加/删除,数据文件迁移到不同的磁盘等),订单将改变。您在结果集中看到的顺序本质上是“无序的”,只要有一天它会不同。看看marc_s的'newid()'顺序 - 它接近于随机顺序。 – Karl 2011-05-11 09:43:04

0

如果您的表中有一个自动增量id,请在订单子句中使用它。如果你不这样做,请考虑添加一个...

4

如果你想让返回的行与你IN中的项目顺序相同,你需要找到一些方法来指定在ORDER BY子句 - 获取SQL Server定义订单的唯一方法。例如: -

select * from blabla where column in ('03.01.KO61.01410', 
'03.02.A081.15002', 
'03.02.A081.15016', 
'03.02.A081.15003', 
'02.03.A081.57105') 
order by 
CASE column 
when '03.01.KO61.01410' then 1 
when '03.02.A081.15002' then 2 
when '03.02.A081.15016' then 3 
when '03.02.A081.15003' then 4 
when '02.03.A081.57105' then 5 
end 
0

试试这个:从http://www.sommarskog.se/arrays-in-sql-2008.html

CREATE TYPE varchar20_list_type AS TABLE (
    id INT IDENTITY PRIMARY KEY, 
    val VARCHAR(20) NOT NULL UNIQUE 
) 

DECLARE @mylist varchar20_list_type 
INSERT @mylist (val) VALUES 
    ('03.01.KO61.01410'), 
    ('03.02.A081.15002'), 
    ('03.02.A081.15016'), 
    ('03.02.A081.15003'), 
    ('02.03.A081.57105') 

SELECT 
    * 
FROM 
    blabla 
    JOIN @mylist AS t 
    ON 
     blabla.col = t.val 
ORDER BY 
    t.id 

更多信息顺便说一句,这可以很容易地在PostgreSQL中实现与价值观:http://www.postgresql.org/docs/9.0/static/queries-values.html