2 回答

TA貢獻1780條經驗 獲得超5個贊
select *
from 表
order by (select case sunxun when 'A' then 3 when 'B' then 1 when 'C' then 2 when 'D' then 4 end)
試試吧,SQL SERVER適用。
兩表聯合查詢,再排下序就行了INNER JOIN 運算
組合兩個表中的記錄,只要在公共字段之中有相符的值。
語法
FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2
INNER JOIN 運算可分為以下幾個部分:
部分 說明
table1, table2 記錄被組合的表的名稱。
field1, field2 被聯接的字段的名稱。若它們不是由數字構成的,則這些字段必須為相同的數據類型并包含同類數據,但它們無須具有相同的名稱。
compopr 任何的關系比較運算子:"=," "<," ">," "<=," ">=," 或 "<>."
說明
可以在 FROM 子句中使用INNER JOIN運算。.這是最普通的聯接類型。只要在這兩個表的公共字段之中有相符值,內部聯接將組合兩個表中的記錄。
可以使用 INNER JOIN 與部門表及員工表選擇每一個部門中的全部員工。反之,可以使用 LEFT JOIN或 RIGHT JOIN運算創建 outer join,從而選擇所有部門(即使有些并沒有員工)或所有員工(即使有些尚未分配到部門)。
若試圖聯接包含 Memo或 OLE Object數據的字段,會導致錯誤。
可以聯接任何兩個相同類型的數值字段。例如,可以聯接 AutoNumber和 Long字段,因為它們類型相似。但不能聯接 Single 和 Double 類型的字段。
下列示例顯示如何在類標識符字段聯接類表及產品表:
SELECT CategoryName, ProductName
FROM Categories INNER JOIN Products
ON Categories.CategoryID = Products.CategoryID;
在上面的示例中,類標識符是已被聯接的字段,但是它并不包含在查詢輸出中,因它并非被包含在 SELECT 語句之中。在這個示例中,若要包含聯接字段,將字段名包含在 SELECT 語句中, Categories.CategoryID.
也可以使用下列語法,在一個 JOIN 語句中鏈接多個 ON 子句:
SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2) OR
ON table1.field3 compopr table2.field3)];
也可以使用下列語法,嵌套 JOIN 語句:
SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;
在一個 INNER JOIN 之中,可以嵌套 LEFT JOIN 或 RIGHT JOIN,但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOIN。
--------------------------------------------
ORDER BY 子句
按照遞增或遞減順序在指定字段中對查詢的結果記錄進行排序。
語法
SELECT 字段表
FROM 表
WHERE選擇準則
[ORDER BY字段1 [ASC | DESC ][, 字段2 [ASC | DESC ]][, ...]]]
包含 ORDER BY 子句的 SELECT 語句具有以下幾個部分:
部分 說明
fieldlist 要和任何字段名別名, SQL 合計函數s, 選擇斷定 (ALL, DISTINCT, DISTINCTROW或 TOP)或其他 SELECT 語句 選擇一起檢索的字段名稱。
table 從其中獲取記錄的表的名稱。欲知更多信息請看 FROM 子句.
selectcriteria 選擇準則。如果此 語句 包含一個 WHERE 子句, Microsoft Jet數據庫引擎 會在記錄上應用WHERE條件,然后把值排序。
field1, field2 要排序記錄的字段名。
說明
ORDER BY 是可選的。不過,如果要將數據以排序時的順序顯示出來,就必須使用 ORDER BY。
缺省排序順序是升序 (A至 Z, 0至 9).以下兩個示例都用雇員的姓對雇員姓名排序:
SELECT LastName, FirstName
FROM Employees
ORDER BY LastName;
SELECT LastName, FirstName
FROM Employees
ORDER BY LastName ASC;
為按遞減順序排序(Z 至 A,9 至0),必須將 DESC 保留字添加到要遞減排序的每一字段的尾部。下例選擇雇員薪金并對雇員用遞減順序排序。
SELECT LastName, Salary
FROM Employees
ORDER BY Salary DESC, LastName;
如果你在ORDER BY 子句中標明了包含 Memo或 OLE Object數據的一個字段,一個錯誤就產生了。Microsoft Jet 數據庫引擎不對這些類型的字段排序。
ORDER BY通常是 SQL 語句中最后一項。
ORDER BY 子句可包含添加的字段。首先用 ORDER BY之后列舉的第一個字段對記錄排序。然后對此字段中等值的記錄用第二字段列舉的值進行排序,依此類推。

TA貢獻1803條經驗 獲得超3個贊
create table test(
商品編碼 int identity(1,1),
銷量 int,
銷額 int,
毛利 int
)
insert test select 2,26,77
union select 55,55,65
union select 5,35,90
union select 55,2,5
union select 54,24,2
select 商品編碼,
銷量,銷量名次=(select count(*)+1 from test a where a.銷量>b.銷量),
銷額,銷額名次=(select count(*)+1 from test a where a.銷額>b.銷額),
毛利,毛利名次=(select count(*)+1 from test a where a.毛利>b.毛利) from test b
添加回答
舉報