I'm using SQL Server 2012
LOCATIONDETAIL table
OID LOCATIONNAME PARENTID
1 GLOBAL 0
2 NORTH 1
3 SOUTH 1
4 NORTH1 2
5 SOUTH1 3
LOCATIONSITECONFIG table
OID LOCATIONID SITENAME
1 2 TEST
I use a recursive CTE Query
;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
NORTH is a now a separate site in Global.This Query returns North and North 1 in tree structure which is OK.
When I make Global as a new site, i dont want to include North as part of Global site.
Example , adding site 2 named (NEWTEST), which is Global
LOCATIONSITECONFIG table
OID LOCATIONDETAILOID SITENAME
1 2 TEST
2 1 NEWTEST
The above Query returns Global , NORTH, NORTH1, SOUTH, SOUTH1 and again NORTH(TEST) AND NORTH1 (Duplicate of records)
I want the query to return Global , NORTH (TEST), NORTH1, SOUTH, SOUTH1
The query should ignore if the child has site created already. Please help