Sql-Server
僅對 ORDER BY 子句中的第一列進行排序
好像我誤解了“訂購者”的概念。
我有一個具有這種結構和數據的表:
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
我希望兩列都
Value1
從Value2
10 到 1,因為我DESC
對這兩列都使用了。但我看到了這個輸出:
為什麼也不
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 排序的字典。)