Sql-Server

僅對 ORDER BY 子句中的第一列進行排序

  • May 30, 2019

好像我誤解了“訂購者”的概念。

我有一個具有這種結構和數據的表:

CREATE TABLE TestTest (Value1 Int, Value2 Int);

INSERT INTO TestTest VALUES
(1, 10),
(2, 9),
(3, 8),
(4, 7),
(5, 6),
(6, 5),
(7, 4),
(8, 3),
(9, 2),
(10, 1)
;

使用以下查詢:

Select Value1 , Value2
from TestTest
order by Value1 desc,Value2 desc

我希望兩列都Value1Value210 到 1,因為我DESC對這兩列都使用了。

但我看到了這個輸出:

Value1 按降序排列,Value2 不是

為什麼也不Value2按降序排列?

您正在對數據行進行排序,而不是單獨對每一列進行排序。

由於您的ORDER BY子句,行 (10, 1) 位於行 (1, 10) 之前。

只有Value2在第一列出現平局時才會發揮作用。

正如Hellion進一步解釋的那樣,就數據庫而言,對 (10, 1) 是一個不可分割的單元:它不是兩個值,而是一個集合(恰好包含兩個值)。您不能只是將套裝分成幾塊,然後隨意將它們換成不同的套裝。正如我所說(正如 Darko 在另一個答案中所示),該ORDER BY子句按指定的第一個列 ( Value1) 排序,然後如果在 中存在多個具有相同數字Value1的行,則按 對行的子集進行排序Value2

作為另一個說明,您還可以考慮AC建議的範例:

另請參閱字典對單詞進行排序的方式:AA、AB、AC、BA、BB、BC、CA、CB、CC… 現在用您的第一列值替換第一個字母(即使它超過一個數字)和第二個字母與第二列值,你去 - 相同的原則。(是的,為了清楚起見,我對 ASCending 進行了排序——很難找到 DESCending 排序的字典。)

引用自:https://dba.stackexchange.com/questions/239314