我有一個區域和子區域的分層表,我需要列出區域和子區域(這很容易)的樹,但另外,我需要一個列,顯示每個區域的所有子區域的ID。列出類別/子類別樹並在同一行中顯示其子類別
例如:
id name superiorId
-------------------------------
1 RJ NULL
2 Tijuca 1
3 Leblon 1
4 Gavea 2
5 Humaita 2
6 Barra 4
我需要的結果是這樣的:
id name superiorId sub-regions
-----------------------------------------
1 RJ NULL 2,3,4,5,6
2 Tijuca 1 4,5,6
3 Leblon 1 null
4 Gavea 2 4
5 Humaita 2 null
6 Barra 4 null
我這樣做,是通過創建檢索區域行的東西()的函數, 但是當我從一個國家選擇所有區域時,例如,查詢變得非常慢,因爲我執行函數來獲取每個區域的區域兒子。
有誰知道如何以優化的方式獲得?
說,「檢索所有的ID作爲行」的功能是:
我的意思是,函數返回所有的子區域的ID作爲一個字符串,用逗號分隔。 功能是:
CREATE FUNCTION getSubRegions (@RegionId int)
RETURNS TABLE
AS
RETURN(
select stuff((SELECT CAST(wine_reg.wine_reg_id as varchar)+','
from (select wine_reg_id
, wine_reg_name
, wine_region_superior
from wine_region as t1
where wine_region_superior = @RegionId
or exists
(select *
from wine_region as t2
where wine_reg_id = t1.wine_region_superior
and (
wine_region_superior = @RegionId
)
)) wine_reg
ORDER BY wine_reg.wine_reg_name ASC for XML path('')),1,0,'')as Sons)
GO
這不太合理。第二個「RJ」應該是「TJ」嗎?爲什麼樣本輸出中的「RJ」具有2到6的子區域,但不包括也連接到「RJ」的7,8和9?清理數據,也許我們可以提供幫助。 – mwigdahl 2011-12-27 19:31:24
對不起。編輯時我搞砸了......這是固定的 – 2011-12-28 12:27:37