2009-08-24 2 views
0

SQL 쿼리를 사용하고 있으며 아래 테이블이 있습니다.SQL 쿼리에서 Breadcrumbs 구조 만들기

기구

OrgID Name   RAOGID  RAOID SubGroupID 
1  Org RAOG  1 NULL  NULL 
2  Org RAO   NULL  1  NULL 
3  Org Sub Group NULL  NULL  1 

RAOG

RAOGID AccredID 
1    2 

RAO

RAOID RAOGID 
1   1 

하위 그룹

SubGroupID RAOID 
1   1 

위 그림과 같이 내가 위 테이블의 구조와 이동 경로를 확인해야합니다, 네 개의 테이블을 가지고, 그래서 형식 아래에있는 데이터를 반환 할 쿼리를 작성하려면, 아래를 참조하십시오.

RAOGID >> RAOID은 >> 내 이동 경로가 될 것입니다 위의 데이터에서 예를 들어

을 SubGroupID

조직 RAOG >> 조직 RAO >> 조직 하위 그룹

은 "기구 "테이블에는 ROAG, RAO 및 SubGroup의 모든 ID가 포함되어 있으므로 위 형식으로 데이터를 반환하는 쿼리가 필요합니다.

하나 이상의 기능이 필요합니다. 내 이동 경로가 될 수 있도록 더 subgroupid가없는 경우 나 이동 경로를 표시하지 않으 조직 RAOG >> 조직 RAO 더 RAOID 다음 하나의 breadcrumd 즉 조직 RAOG

감사가있을 것 없다, 안부, 마노

+0

나는 잃어버린 ... 테이블 형식으로 예제 출력을 줄 수 있습니까? – MatBailie

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 어떤 유형의 예제가 필요한지, 위의 테이블 구조를 제공하고 필요한 출력은 Org RAOG >> Org RAO >> Org Sub Group이고 "Sub Group"이 없다면 탐색 경로에는 Org RAOG >> Org가 있습니다. RAO가 RAO와 동일하다면 RAO가 없으면 breadcrubs는 Org RAOG가됩니다. –

+0

위의 조건에 따라 수정하고 싶습니다. SELECT ISNULL (루트. 이름, '') + '>>'ISNULL (중간 이름, '') + '>>'ISNULL (하위 이름, '') FROM tblOrganisation sub INNER JOIN tblSubGroup sg ON sg.subgroupid = sub.subgroupid INNER JOIN tblRAO r 켜짐 r.raoid = sg.raoid INNER JOIN tbl 조직 중간 켜기 mid.raoid = r.root.raogid = r.raogid –

답변

2

다음 쿼리를 사용하여 MB 미만

SELECT  c.Name + ' >> ' + b.Name + '>>' + a.Name AS breadcrumb 
FROM   tblOrganisation AS a LEFT OUTER JOIN 
         tblSubGroup AS sg ON a.SubGroupID = sg.SubGroupID LEFT OUTER JOIN 
         tblOrganisation AS b ON sg.RAOID = b.RAOID LEFT OUTER JOIN 
         tblRAO AS rao ON rao.RAOID = b.RAOID LEFT OUTER JOIN 
         tblOrganisation AS c ON c.RAOGID = rao.RAOGID 
WHERE  (sg.RAOID IS NOT NULL) AND (a.OrgID = @ORGID) 
UNION 
SELECT  c.Name + ' >> ' + a.Name AS breadcrumb 
FROM   tblOrganisation AS a LEFT OUTER JOIN 
         tblRAO AS rao ON rao.RAOID = a.RAOID LEFT OUTER JOIN 
         tblOrganisation AS c ON c.RAOGID = rao.RAOGID 
WHERE  (rao.RAOID IS NOT NULL) AND (a.OrgID = @ORGID) 
UNION 
SELECT  Name AS breadcrumb 
FROM   tblOrganisation AS a 
WHERE  (RAOGID IS NOT NULL) AND (OrgID = @ORGID) 

건배!

0

당신과 같이, 일부 left join의 자체에 시간의 무리를 테이블에 가입하여이를 얻을 수 있습니다 : 나는 SQL의 breadcru에 대해 위의 문제를 해결

select 
    org_roag.name + 
    case when org_roa.id is not null then 
     '>>' + org_roa.name + 
     case when org_sg.id is not null then 
      '>>' + org_sg.name 
     else '' end 
    else '' end as breadcrumb 
from 
    organization org_roag 
    left join roa on 
     org_roag.roagid = roa.roagid 
    left join organization org_roa on 
     roa.roaid = org_roa.roaid 
    left join subgroup sg on 
     roa.roaid = sg.roaid 
    left join organization org_sg on 
     sg.subgroupid = org_sg.subgroupid 
where 
    org_roag.roagid is not null