我在下面粘貼了一個非常簡化的SQL查詢語句。我遇到的問題是ORDER BY
聲明影響了我的CTE的選擇結果。我一直無法理解爲什麼會這樣,我原先的想法是,在CTE內部,我執行一些SELECT
聲明,然後ORDER BY
應該處理這些結果。SQL CTE和ORDER BY影響結果集
不幸的是,我看到的行爲是我的內部SELECT
聲明受到訂單的影響,給我的'物品'不在TOP 10
。
這裏是數據的例子: (由ID以相反的順序索引)
ID, Date
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9594 2010-08-06
9593 2010-08-05
9592 2010-08-02
....
9573 2010-08-10
....
8174 2010-08-05
....
38 2029-12-20
我的基本查詢:
;with results as(
select TOP 10 ID, Date
from dbo.items
)
SELECT ID
FROM results
查詢返回:
ID, Date
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9594 2010-08-06
9593 2010-08-05
9592 2010-08-02
我與ORDER BY
;with results as(
select TOP 10 ID, Date
from dbo.items
)
SELECT ID
FROM results
ORDER BY Date DESC
查詢查詢返回:
ID, Date
38 2029-12-20
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9573 2010-08-10
9594 2010-08-06
8174 2010-08-05
任何人都可以解釋爲什麼第一個查詢將只返回在表中的前10位ID和第二查詢返回整個表的前10(應用排序後)。
我想我想要它從表中返回前10行,然後排序前10行,不排序整個表,並choo從這套設備中排名前10位......我的誤解在哪裏? – Brett 2010-10-13 14:50:38
@Brett - 您需要告訴數據庫「表中前10行」的含義。根據什麼指標排名前10位?也許按日期排序? – 2010-10-13 14:51:30
那麼你是否說我需要在CTE內部下單?所以:';結果如下(SELECT TOP 10 ID,PostedDate From items ORDER BY ID desc)'?....我的困惑源於CTE之外的ORDER BY是否影響CTE結果? – Brett 2010-10-13 14:52:46