嗨大家好~
最近遇到一個問題想要請教大家
下面有張資料表test存取各單位部門
而欄位name為部門名稱、ID為該部門階層碼、P_ID為上層部門階層碼,
並希望依據其『上下層關係』排列如下圖順序(請參考圖中上下層ID及P_ID關係。)
參考一些文章後 撰寫出的程式碼與運行結果如下
運行結果來說A2尚未被正確排序、
以及若使用這個寫法當遇到大量資料時這種方法會非常麻煩,
自己是SQL新手,想請問是否有更好的修改方式,感激不盡!!
你有看過樹狀結構的方式嗎??
你可以先了解看看,可以符合大部份階層單位
CREATE TABLE [dbo].[單位資料表名稱](
[DEPT_NOTEID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[DEPT_PARENDID] [numeric](18, 0) NOT NULL,
[DEPT_ID] [nvarchar](20) NULL,
[DEPT_ORDERBY] [int] NULL,
[DEPT_LEVEL] [int] NULL,
[DEPT_CNAME] [nvarchar](60) NULL
CONSTRAINT [PK_DEPT] PRIMARY KEY CLUSTERED
(
[DEPT_NOTEID] ASC,
[DEPT_PARENDID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[單位資料表名稱] ADD CONSTRAINT [DF_DEPT_DEPT_LOCK] DEFAULT ((0)) FOR [DEPT_LOCK]
GO
ALTER TABLE [dbo].[單位資料表名稱] ADD CONSTRAINT [DF_DEPT_DEPT_SYSTEMLOCK] DEFAULT ((0)) FOR [DEPT_SYSTEMLOCK]
GO
再用遞回的方式來找出上下階層,那每一單位往後如要再拆離成為新的單位。這樣子的結構用在單位或是公文分層的處理。
WITH common_table_expression 參考該文章的範例 D. 利用遞迴通用資料表運算式來顯示多層級的遞迴