本文分享自華為雲社區《【帶你走進DWS大集群內幕】大集群通信:作業hang、殘留問題定位》,作者: 雨落天穹丶。 前言: 測試過程中,我們會遇到這樣一種情況,我的作業都執行很久了,為啥還不結束,是不是作業hang掉了? 或者說,明明看到CN上的作業都沒了,為什麼通過全局視圖發現DN上還有作業在執行而 ...
題目如圖所示,是資料庫源,這次考官需要我用Sql,完成一次數據查詢
需要根據Excel數據查詢結果如上圖,這時候我看到了父子關係,很容易就聯想到了需要使用父子關係,既然是父子關係,一般來說應該遞歸跑不掉了,使用Sql進行遞歸代碼如下:
WITH TEST_CTE AS ( SELECT 地區表1.地區編號, 地區表1.地區名稱, 地區表1.上級編號, Cast(地區表1.地區名稱 as nvarchar(4000)) AS 詳細地區名稱 FROM 地區表 地區表1 WHERE 地區表1.上級編號 = 0 UNION ALL SELECT 地區表2.地區編號, 地區表2.地區名稱, 地區表2.上級編號, CTE.詳細地區名稱+''+ Cast(地區表2.地區名稱 as nvarchar(4000)) AS 詳細地區名稱 FROM 地區表 地區表2 INNER JOIN TEST_CTE CTE ON 地區表2.上級編號=CTE. 地區編號 ) SELECT TEST_CTE.地區編號, TEST_CTE.詳細地區名稱 AS 地區名稱, TEST_CTE.上級編號 FROM TEST_CTE ORDER BY TEST_CTE.地區編號 OPTION(MAXRECURSION 3)
這裡整體上使用UNION ALL 進行全連接,UNION ALL 之上是查出父ID,是第一級,UNION ALL 之下是子ID的查詢,也就是第二級、第三級,最後使用子ID等於父ID,基本上就可以了,註意Cast,需要轉一下類型要不會報錯,OPTION(MAXRECURSION 3)
網上所是遞歸次數 ,最後得出結果如下圖