原文:
返回每個雇員的3個最新訂單:
selectempid ,
orderid ,
custid ,
orderdate ,
requireddate
from sales.orders as
o1where orderid in ( select
top3
orderid
from sales.orders as
o2
where o2.empid =
o1.empid
order
by orderdate desc
, orderid
desc )
selecte.empid ,
a.orderid ,
a.custid ,
a.orderdate ,
a.requireddate
from hr.employees as
e
top3
orderid ,
custid ,
orderdate ,
requireddate
from sales.orders as
o
where o.empid =
e.empid
order
by orderdate desc
, orderid
desc
) as a
先掃瞄employees 獲得empid,對每個empid值對orders表查詢返回 該雇員的3個最新訂單。這裡可以返回多個屬性。
如下:
selectorderid ,
custid ,
orderdate ,
requireddate
from ( select
orderid ,
custid ,
orderdate ,
requireddate ,
row_number()
over ( partition by empid order
by orderdate desc , orderid desc ) as
rownum
from
sales.orders
) asd
where rownum <=
3
練習:
從學生表中選取對應班級的前num名學生成績
--顯示結果/*bj xh name cj
---------- ---- ---------- -----------
一班 a006 a6 100
一班 a005 a5 99
一班 a001 a1 89
一班 a002 a2 89
二班 b001 b7 100
二班 b001 b6 99
二班 b001 b9 97
二班 b001 b8 90
二班 b001 b5 88
*/
--建立測試表
declare
@student
table( --
-學生表
bj varchar(10), --
班級xh char(4), --
學號name varchar(10), --
姓名
cj int) --
成績declare
@tjtable( --
-統計表
bj varchar(10), --
班級num int) --
人數 :從學生表中選取對應班級的前num名學生成績
set nocount on
--新增測試資料
insert
@student
select'一班
' ,'
a001
','a1
',89
insert
@student
select'一班
' ,'
a002
','a2
',89
insert
@student
select'一班
' ,'
a003
','a3
',59
insert
@student
select'一班
' ,'
a004
','a4
',80
insert
@student
select'一班
' ,'
a005
','a5
',99
insert
@student
select'一班
' ,'
a006
','a6
',100
insert
@student
select'一班
' ,'
a007
','a7
',82
insert
@student
select'二班
' ,'
b001
','b1
',19
insert
@student
select'二班
' ,'
b001
','b2
',81
insert
@student
select'二班
' ,'
b001
','b3
',69
insert
@student
select'二班
' ,'
b001
','b4
',86
insert
@student
select'二班
' ,'
b001
','b5
',88
insert
@student
select'二班
' ,'
b001
','b6
',99
insert
@student
select'二班
' ,'
b001
','b7
',100
insert
@student
select'二班
' ,'
b001
','b8
',90
insert
@student
select'二班
' ,'
b001
','b9
',97
insert
@tjselect'一班
',3insert
@tjselect'二班
',5
--2005.t-sql
select
t.bj,s.xh,s.name,s.cj
from
@tjt
cross
select
top(t.num)
with ties --
加 with ties,一班將選出4個人(2個人並列第三名)
xh,name,cj
from
@student
where t.bj=bj --
加where 功能類似於 inner join ;不加類似於 cross join
order
by cj desc
)sorder
bycase
when t.bj='一班
'then
1else
2end
asc,s.cj desc,s.xh asc
---排序
你真的會玩SQL嗎?冷落的Top和Apply
你真的會玩sql嗎?系列目錄 你真的會玩sql嗎?之邏輯查詢處理階段 你真的會玩sql嗎?和平大使 內連線 外連線 你真的會玩sql嗎?三正規化 資料完整性 你真的會玩sql嗎?查詢指定節點及其所有父節點的方法 你真的會玩sql嗎?讓人暈頭轉向的三值邏輯 你真的會玩sql嗎?exists和in之間的...
你真的會玩SQL嗎?簡單的資料修改
你真的會玩sql嗎?系列目錄 你真的會玩sql嗎?之邏輯查詢處理階段 你真的會玩sql嗎?和平大使 內連線 外連線 你真的會玩sql嗎?三正規化 資料完整性 你真的會玩sql嗎?查詢指定節點及其所有父節點的方法 你真的會玩sql嗎?讓人暈頭轉向的三值邏輯 你真的會玩sql嗎?exists和in之間的...
你真的會玩SQL嗎?簡單的資料修改
你真的會玩sql嗎?系列目錄 你真的會玩sql嗎?之邏輯查詢處理階段 你真的會玩sql嗎?和平大使 內連線 外連線 你真的會玩sql嗎?三正規化 資料完整性 你真的會玩sql嗎?查詢指定節點及其所有父節點的方法 你真的會玩sql嗎?讓人暈頭轉向的三值邏輯 你真的會玩sql嗎?exists和in之間的...