私は、SQL Server 2012の私は、再帰CTEクエリ再帰CTE SQL(親子)
;WITH LOCALSITEHIERARCHY AS
(
SELECT A.OID
,A.PARENTOID
,CAST(A.LOCATIONNAME + ' (' + LSC.SITENAME + ')' AS NVARCHAR(100)) AS NAME
,LSC.OID AS SITEOID
FROM LOCATIONDETAIL A
INNER JOIN LOCATIONSITECONFIG LSC
ON LSC.LOCATIONDETAILOID = A.OID
WHERE
LSC.SITENAME <> 'GLOBAL' AND LSC.RECSTATUS = 'A'
UNION ALL
SELECT
A.OID
,A.PARENTOID
,CAST(A.LOCATIONNAME AS NVARCHAR(100))
,LH.SITEOID
FROM LOCATIONDETAIL A
INNER JOIN LOCALSITEHIERARCHY LH ON A.PARENTOID = LH.OID
)
SELECT * FROM LOCALSITEHIERARCHY
を使用
LOCATIONDETAILテーブル
OID LOCATIONNAME PARENTID
1 GLOBAL 0
2 NORTH 1
3 SOUTH 1
4 NORTH1 2
5 SOUTH1 3
LOCATIONSITECONFIGテーブル
OID LOCATIONID SITENAME
1 2 TEST
を使用しています
ノースは今やセピアですこの問合せは、NorthおよびNorth 1をツリー構造で返します。これは問題ありません。
グローバルを新しいサイトとして作成すると、グローバルサイトの一部としてNorthを含める必要はありません。
例、
LOCATIONSITECONFIGテーブル
OID LOCATIONDETAILOID SITENAME
1 2 TEST
2 1 NEWTEST
上記のクエリ返し グローバル、NORTH、NORTH1、南、SOUTH1 と再びNORTH(TESTはグローバルである(NEWTEST)と名付けられた追加サイト2、 )AND NORTH1(レコードの重複)
返信するクエリを返します。 グローバル、NORTH1(テスト)、NORTH1、SOUTH、SOUTH1
子サイトがすでに作成されている場合は、クエリは無視されます。助けてください
あなたは、GLOBAL(NEWTEST)、NORTH(TEST)、NORTH1、SOUTH、SOUTH1を返すようにしたいでしたか? –