久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術文章
文章詳情頁

SQL Server 2005數(shù)據庫中表的遞歸查詢

瀏覽:79日期:2023-11-04 19:19:02
遞歸查詢對于同一個表父子關系的計算提供了很大的方便,這個示例使用了SQL server 2005中的遞歸查詢,使用的表是CarParts,這個表存儲了一輛汽車的所有零件以及結構,part為零件單位,subpart為子零件,Qty為數(shù)量。

具體示例如下:

*/

CREATE TABLE CarParts

(

CarID INT NOT NULL,

Part VARCHAR(15),

SubPart VARCHAR(15),

Qty INT

)

GO

INSERT CarParts VALUES (1, 'Body', 'Door', 4)

INSERT CarParts VALUES (1, 'Body', 'Trunk Lid', 1)

INSERT CarParts VALUES (1, 'Body', 'Car Hood', 1)

INSERT CarParts VALUES (1, 'Door', 'Handle', 1)

INSERT CarParts VALUES (1, 'Door', 'Lock', 1)

INSERT CarParts VALUES (1, 'Door', 'Window', 1)

INSERT CarParts VALUES (1, 'Body', 'Rivets', 1000)

INSERT CarParts VALUES (1, 'Door', 'Rivets', 100)

INSERT CarParts VALUES (1, 'Door', 'Mirror', 1)

INSERT CarParts VALUES (1, 'Mirror', 'small_Mirror', 4)

GO

SELECT * FROM CarParts

GO

/*

一輛汽車需要各個零件的數(shù)目

1個Body 需要4個Door

1個Door 需要1個Mirror

那么

1個body需要4個Mirror

結構很簡單吧

*/

WITH CarPartsCTE(SubPart, Qty)

AS

(

-- 固定成員 (AM):

-- SELECT查詢無需參考CarPartsCTE

-- 遞歸從此處開始

SELECT SubPart, Qty

FROM CarParts

WHERE Part = 'Body'

UNION ALL

-- 遞歸成員 (RM):

-- SELECT查詢參考CarPartsCTE

-- 使用現(xiàn)有數(shù)據往下一層展開

SELECT CarParts.SubPart, CarPartsCTE.Qty * CarParts.Qty

FROM CarPartsCTE

INNER JOIN CarParts ON CarPartsCTE.SubPart = CarParts.Part

WHERE CarParts.CarID = 1

)

SELECT SubPart,Qty AS TotalNUM

FROM CarPartsCTE

/*

注意看最下層的small_Mirror 位于 表最后的位置,

由此可以看出改遞歸不是開始就進行遞歸查詢而是在1層完全展開后在根據該層展開下一層不是深度優(yōu)先的遞歸

*/

drop table CarParts

--------------------------------result---------------------------------------

CarID Part SubPart Qty

----------- --------------- --------------- -----------

1 Body Door 4

1 Body Trunk Lid 1

1 Body Car Hood 1

1 Door Handle 1

1 Door Lock 1

1 Door Window 1

1 Body Rivets 1000

1 Door Rivets 100

1 Door Mirror 1

1 Mirror small_Mirror 4

(10 row(s) affected)

SubPart TotalNUM

--------------- -----------

Door 4

Trunk Lid 1

Car Hood 1

Rivets 1000

Handle 4

Lock 4

Window 4

Rivets 400

Mirror 4

small_Mirror 16

(10 row(s) affected)

示例:

以下示例顯示經理以及向經理報告的雇員的層次列表。

WITH DirectReports(groupid, member, EmployeeLevel,type) AS

(

SELECT groupid, member, 0,type AS EmployeeLevel

FROM groupinfo

WHERE groupid = 'finance_company'

UNION ALL

SELECT e.groupid, e.member, EmployeeLevel + 1,e.type

FROM groupinfo e

INNER JOIN DirectReports d

ON e.groupid = d.member

)

SELECT b.nickname,groupid, member, EmployeeLevel,type

FROM DirectReports,userbasicinfo b

where DirectReports.member=b.id

and type = 1

主站蜘蛛池模板: 侯马市| 曲靖市| 清徐县| 申扎县| 邮箱| 封开县| 改则县| 鹤山市| 大宁县| 麦盖提县| 谷城县| 宝坻区| 淳安县| 邵阳市| 微山县| 武鸣县| 湖州市| 澎湖县| 九台市| 噶尔县| 海林市| 新余市| 肇源县| 宝应县| 建水县| 沙田区| 隆德县| 新安县| 万宁市| 武夷山市| 汕头市| 休宁县| 五莲县| 黑水县| 浮山县| 通道| 池州市| 绩溪县| 安吉县| 米易县| 乐亭县|