开发者

SQL Server: select without order

I am using where in condition in SQL Server. I want to get result without order, because I gave a list into the 'where 开发者_高级运维in' condition.

For example

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')

How can I do?


If you want the rows returned such that they're in the same order as the items in your IN, you need to find some way to specify that in an ORDER BY clause - the only way to get SQL Server to define an order. E.g.:

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


Due to my experience, SQL Server randomly order the result set for WHERE-IN Clause if you does not specify how to order it.

So, if you want to order by your WHERE-IN conditions, you must define some data item to order it as you passed. Otherwise, SQL Server will randomly order your resultset.


You're already doing it - if you don't explicitly specify an order by using ORDER BY, then there is no implied order.

If you want to totally randomize the output, you could add an ORDER BY NEWID() clause:

 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()


If you have an autoincrement id in your table, use it in an order clause. And if you don't, consider adding one...


Try this:

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

More information from http://www.sommarskog.se/arrays-in-sql-2008.html

By the way, this can be easily done in PostgreSQL with VALUES: http://www.postgresql.org/docs/9.0/static/queries-values.html

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜