Создание структуры хлебных крошек из SQL-запроса - PullRequest
0 голосов
/ 24 августа 2009

Я использую SQL Query, и ниже приведены таблицы.

Организация

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

РАОГ

RAOGID  AccredID
1              2  

RAO

RAOID   RAOGID
1         1

Подгруппа

SubGroupID  RAOID
1            1

У меня есть четыре таблицы, как показано выше, мне нужно сделать крошку из структуры таблицы выше, поэтому я хочу написать запрос, который будет возвращать данные в формате ниже, см. Ниже.

RAOGID >> RAOID >> SubGroupID

Например, из приведенных выше данных моя хлебная крошка будет

Орг РАОГ >> Орг РАО >> Подгруппа Орг

Таблица «Организация» содержит все идентификаторы ROAG, RAO и SubGroup, мне нужен запрос, который вернет данные в вышеуказанном формате.

Требуется еще одна функциональность. Я не хочу показывать крошку, если подгруппы нет, поэтому моя крошка будет Org RAOG >> Org RAO и RAOID не будет, тогда будет только одна крошка, т.е. 1040 *

Спасибо, С уважением, Манодж

Ответы [ 2 ]

2 голосов
/ 26 августа 2009

Я решил вышеуказанную проблему для SQL breadcrumb, используя следующий запрос

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)

Ура! * * 1004

0 голосов
/ 24 августа 2009

Вы можете получить это, присоединив таблицу к себе несколько раз с left join с, например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...