標籤:style blog color os 使用 io for ar 資料
需求情境: SQL SERVER 中組織的資料結構是一個層級關係,現在需要抓出每個組織節點以上的全部組織資訊,資料樣本如下:
ADOrg_ID--------------ParentID-----------------ShortName
001 頂級組織名稱
001.021 001 二級組織名稱
001.022 001.021 三級組織名稱
001.021.211 001.022 四級組織名稱
001.023 001.021 三級組織名稱
現在需要得到的結果為:
ADOrg_ID--------------OrgName------------------------------------------ShortName
001 頂級組織名稱 頂級組織名稱
001.021 頂級組織名稱,二級組織名稱 二級組織名稱
001.022 頂級組織名稱,二級組織名稱,三級組織名稱 三級組織名稱
001.021.211 頂級組織名稱,二級組織名稱,三級組織名稱,四級組織名稱 四級組織名稱
001.023 頂級組織名稱,二級組織名稱,三級組織名稱 三級組織名稱
SQL--------------------------------
DECLARE org cursor for select ADOrg_ID,ShortName from ADOrganize DECLARE @ORGID nvarchar(100) DECLARE @ORGSHORTNAME nvarchar(100) DECLARE @RESULT table ( [ID] nvarchar(50) NULL, [OrgInfo] nvarchar(MAX) NULL, [ShortName] nvarchar(50) NULL ) open org; FETCH NEXT FROM org INTO @ORGID,@ORGSHORTNAME WHILE @@FETCH_STATUS=0 BEGIN with node as ( select * from ADOrganize(nolock) where ADOrg_ID=@ORGID union all SELECT par.* FROM ADOrganize(nolock) AS par INNER JOIN node AS RC ON par.ADOrg_ID = RC.ParentID ) INSERT INTO @RESULT SELECT @ORGID,ShortName,@ORGSHORTNAME FROM ADOrganize(nolock) WHERE ADOrg_ID IN (SELECT ADOrg_ID FROM node N ) FETCH NEXT FROM ORG INTO @ORGID,@ORGSHORTNAME END ; CLOSE org; DEALLOCATE org; SELECT ID, data=stuff((SELECT ‘,‘+OrgInfo FROM @RESULT t WHERE ID=t1.ID FOR XML PATH(‘‘)), 1, 1, ‘‘) ,SHORTNAME FROM @RESULT t1 GROUP BY ID,SHORTNAME
說明:因為沒有想到好的方法所以直接用遊標查詢後對資料進行處理,儲存到暫存資料表中,然後對暫存資料表的資料進行分組,使用 stuff 對需要拼接的資料進行拼接,然後輸出。不曉得是否還有更好的方法,歡迎討論~~~~~~~~~
SQL SERVER 實現分組合并實現列資料拼接