2016-08-02 3 views
0

Таблица1Извлечение иерархии на всех уровнях - объединение двух таблиц по sql?

ID title 
1 a1   
2 b   
3 c1 

таблица2

tId title2 PId  
1 a  null  
2 b  1  
3 c  2 

Выход, как:

a1 
    a1 > b 
    b > c1 

Query

SELECT 
    T2.PId, 
    CASE 
    WHEN T3.Title != '' THEN T3.Title + '>' + T2.title2 
    END AS title 
FROM (SELECT 
    T2.PId, 
    T2.title 
FROM (SELECT 
    T1.PgeId 
FROM table1T1) P1 
LEFT JOIN table2 T2 
    ON P1.PgeId = T2.MId) T2 
LEFT JOIN table2 T3 
    ON T2.PId = T3.id 

ответ

0

В е Сначала мне показалось, что это очень запутанно, но я нашел, что отношение определяется таблицей 2. Вот решение:

WITH Table1 AS 
(
    SELECT * FROM (VALUES 
    (1, 'a1'), 
    (2,'b'), 
    (3,'c1')) T(ID, Title) 
), Table2 AS 
(
    SELECT * FROM (VALUES 
    (1, 'a',NULL), 
    (2,'b',1), 
    (3,'c',2)) T(TId, Title, PId) 
) 
SELECT CASE WHEN T1_P.Title IS NOT NULL AND T1_T.Title IS NOT NULL THEN T1_P.Title + ' > ' + T1_T.Title 
     WHEN T1_T.Title IS NOT NULL THEN T1_T.Title 
     ELSE T1_P.Title END 
FROM Table2 T2 
LEFT JOIN Table1 T1_P ON T1_P.ID=T2.PId 
LEFT JOIN Table1 T1_T ON T1_T.ID=T2.TId 
0

Код:

CREATE TABLE #Table1 ( 
ID   INT 
,Title  NVARCHAR(20) 
) 
CREATE TABLE #Table2 ( 
    ID   INT 
    ,Title  NVARCHAR(20) 
    ,pID   INT 
    ) 
INSERT INTO #Table1 (ID,Title) VALUES (1,'A1'),(2,'B'),(3,'C1') 
INSERT INTO #Table2 (ID,Title,pID) VALUES (1,'A',NULL),(2,'B',1),(3,'C',2) 

SELECT 
    CASE 
     WHEN T2.Title > T1.Title THEN T1.Title 
     WHEN T2.Title IS NULL THEN NULL 
     ELSE T2.Title 
    END AS Col1 
    ,'>' AS H 
    ,CASE 
     WHEN T2.Title < T1.Title THEN T1.Title 
     WHEN T1.Title IS NULL THEN NULL 
     ELSE T2.Title 
    END AS Col2 
FROM #Table1 T1 
RIGHT JOIN #Table2 T2 ON T1.ID = T2.pID 

DROP TABLE #Table1 
DROP TABLE #Table2 

EXIST является:

enter image description here

Смежные вопросы