我在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')
我該怎麼辦?
我在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')
我該怎麼辦?
由於我的經驗,SQL Server會隨機排序結果爲WHERE,按照條款,如果你沒有規定如何訂購它。
所以,如果你想通過你的WHERE-IN條件來定購,你必須定義一些數據項來在你通過時對它進行排序。否則,SQL Server將隨機地對您的結果集進行排序。
您已經在使用它 - 如果您沒有使用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()
不,我不希望sql排序。因爲我在哪裏發表了條件清單。它應該作爲在哪裏。但是SQL根據ASC自動命令它。明白我? – esquare 2011-05-11 09:36:42
除非使用order by,否則RDBMS返回的結果順序未定義。如果在數據,索引等方面沒有任何變化,則可能在相同的時間內以相同的順序從相同的查詢中接收結果。然後有一天,一些變化(數據添加,刪除或更新,索引添加/刪除,數據文件遷移到不同的磁盤等),訂單將改變。您在結果集中看到的順序本質上是「無序的」,只要有一天它會不同。看看marc_s的'newid()'順序 - 它接近於隨機順序。 – Karl 2011-05-11 09:43:04
如果您的表中有一個自動增量id,請在訂單子句中使用它。如果你不這樣做,請考慮添加一個...
如果你想讓返回的行與你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
試試這個:從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
您的查詢看起來OK。有什麼問題? – 2011-05-11 09:35:00
結果應該按照我的情況提到的順序 – esquare 2011-05-11 09:40:49