❶ sql server 怎麼排序
排序可以是升序的 (ASC),也可以是降序的 (DESC)。如果未指定是升序還是降序,就假定為 ASC。
下面的查詢返回按 ProctID 升序排序的結果:
代碼如下 復制代碼
USE AdventureWorks2008R2;
GO
SELECT ProctID, ProctLine, ProctModelID
FROM Proction.Proct
ORDER BY ProctID;
如果 ORDER BY 子句中指定了多個列,則排序是嵌套的。下面的語句先按產品子類別降序排序 Proction.Proct 表中的行,然後在每個產品子類別中按 ListPrice 升序排序這些行。
代碼如下 復制代碼
USE AdventureWorks2008R2;
GO
SELECT ProctID, ProctSubcategoryID, ListPrice
FROM Proction.Proct
ORDER BY ProctSubcategoryID DESC, ListPrice;
問題
同一個查詢的結果集為什麽有時候是按他想要的順序排列,有時候又不是,或者是在SQL2000里是這個順序,到了SQL2005/2008又是那個順序?
其實,只要語句里沒有指定「order by」,SQLSERVER並不會按照順序返回的。有可能你的表裡有一個欄位已經建立了索引
你想結果集按照那個建立了索引的欄位排序,那麼你不指定「order by」是沒有問題的,因為表的存儲順序就是按照那個欄位
的順序排好序了,所以可以不指定「order by」,但是如果你沒有在想排序的那個欄位建立索引,或者在SQL2000里建立了
索引,而在SQL2005/2008里沒有建立索引,那麼就要明確地用「order by」指定。如果你沒有指定,哪怕一模一樣的查詢,
結果集順序這一次和上一次不一樣是很正常的。
❷ 求解SQL資料庫兩張表數據的排序問題
select ID=Dept_ID,Name=Dept_Name
from (
select *,flag=0 from d_dept
union all
select *,1 from d_unit) k
order by left(Dept_ID,3) asc,flag asc,Dept_ID asc
首先通過
select *,flag=0 from d_dept
union all
select *,1 from d_unit
將所有內容合並在一起 這樣合一起是亂序的
然後將它作為臨時表
from (
select *,flag=0 from d_dept
union all
select *,1 from d_unit) k
注意這里我加個了個FLAG欄位 是為了標志0為部門 1為單位 為之後排序做准備
然後利用這個臨時表 我進行排序 看下面
select ID=Dept_ID,Name=Dept_Name
這句的意思 理解的吧 選取臨時結果集的2個欄位,注意這里的Dept_ID和Dept_Name分別語句包含了unit_ID 和unit_Name(這個自己執行下臨時結果集就知道了)
我們重點來說排序
order by left(Dept_ID,3) asc,flag asc,Dept_ID asc
先看第一個left(Dept_ID,3) 首先要進行部門排序的 我們是以左邊三個符號位排序信息的 排出來就是
001
001001
..
002
..
003
003...
上面的排序不保證每個部門裡面的排序時按照部門號先 然後再改部門的單位的順序 所以加上flag asc
在每組裡面 要讓部門號先 通過FLAG=0 將部門號放在了前面
所以這里出來:
001
001001
..
002
..
003
003...
請看 在001號部門裡面 001 肯定在 001XXX前面了
但是這排序不能保證 001XXX 001XXY這樣的單位號排序 就是加上
Dept_ID asc 明白了吧
❸ SQL中多條件排序問題
第一步:確定輸出內容,你要的欄位為name,數據結果為b,d,a,c ;
第二步:找規律,b、d的online為1;a、c的位說明是按online 降序;然後來看下 b 、d的online相同,viewnum為30和10,那麼就是viewnum降序;如果a、c的viewnum也是降序那麼規律就找到了,發現 a為40、c為20,確實是降序,滿足條件。
第三步:總結規律就是先按online降序排序,之後再按viewnum降序排序。
第四步:得出需要的sql。
,viewnumdesc;
❹ 如何將datatable進行多列排序
你可以試試這樣
設你datatable名稱為table
table.DefaultView.Sort = "號碼 asc,時間 desc"
其中 asc還是desc你自已指定
最後取數據取table的View而不是table
❺ sql語句如何根據另一個表進行排序
select a.*
from a
left join
(
select h,count(*) as c_num
from b
group by h
)t
on a.h=t.h
order by t.c_num desc/asc以B表H欄位的重復量來對A表的數據進行排序,至於是升序還是降序,樓主根據自己的需求吧
❻ 在SQL語句中,如何把兩張表的數據按時間排序查詢
表a為入庫表
表b為出庫表
它們都有一個日期欄位 mkrdat,貨號為 goodsid,數量欄位為qty
那麼兩張表的組合方式可以這樣
select goodsid,qty ,mkrdat from
(select goodsid,qty ,mkrdat from a where goodsid ='查詢貨號' union all
select goodsid,qty ,mkrdat from b where goodsid ='查詢貨號'
)
aa order by goodsid,mkrdat
❼ 急求sql語句:2表合並查詢、統計並排序
select 姓名,簽到,max(時間) 時間,count(*) 次數
from (select 姓名,簽到,時間 from table1
union all
select 姓名,簽到,時間 from table2
)
group by 姓名,簽到
order by 次數 desc
❽ 求多表查詢,多列排序,的SQL語句
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, ProctName
FROM Categories INNER JOIN Procts
ON Categories.CategoryID = Procts.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之後列舉的第一個欄位對記錄排序。然後對此欄位中等值的記錄用第二欄位列舉的值進行排序,依此類推。