2016-10-28 7 views
0

Excel 내보내기의 경우 "has-reference-to"및 "is-referenced-from"항목이 모두있는 각 항목에 두 개의 열을 추가해야합니다.자체 참조 테이블의 행 결합

Here is my SQL Fiddle with my tables and my results.

내 테이블 모두 FromItemIdToItemId

CREATE TABLE Item (ItemId INT, Title NVARCHAR(100)) 
INSERT INTO Item VALUES(1, 'Title 1') 
INSERT INTO Item VALUES(2, 'Title 2') 
INSERT INTO Item VALUES(3, 'Title 3') 
INSERT INTO Item VALUES(4, 'Title 4') 
INSERT INTO Item VALUES(5, 'Title 5') 

CREATE TABLE ItemReference (ReferenceId INT, FromItemId INT, ToItemId INT) 
INSERT INTO ItemReference VALUES(1, 1, 2) 
INSERT INTO ItemReference VALUES(2, 1, 3) 
INSERT INTO ItemReference VALUES(3, 4, 5) 
INSERT INTO ItemReference VALUES(4, 5, 1) 

테이블 Item에서 ItemId이 포함되어 있습니다.

예상 출력

+---------+------------------+--------------------+ 
| Title | Has reference to | Is referenced from | 
+---------+------------------+--------------------+ 
| Title 1 | Title 2, Title 3 | Title 5   | 
+---------+------------------+--------------------+ 
| Title 2 |     | Title 1   | 
+---------+------------------+--------------------+ 
| Title 3 |     | Title 1   | 
+---------+------------------+--------------------+ 
| Title 4 | Title 5   |     | 
+---------+------------------+--------------------+ 
| Title 5 | Title 1   | Title 4   | 
+---------+------------------+--------------------+ 

내 쿼리

SELECT item.Title, 
    ISNULL([Has reference to], '') [Has reference to], 
    ISNULL([Is referenced from], '') [Is referenced from] 
FROM Item item 
OUTER APPLY 
(
    SELECT i.Title + ', ' 
    FROM ItemReference ref 
    INNER JOIN Item i ON ref.FromItemId = i.ItemId 
    WHERE ref.FromItemId = item.ItemId 
    ORDER BY ref.ToItemId DESC 
    FOR XML PATH('') 
) OURT ([Has reference to]) 
OUTER APPLY 
(
    SELECT i.Title + ', ' 
    FROM ItemReference ref 
    INNER JOIN Item i ON ref.ToItemId = i.ItemId 
    WHERE ref.ToItemId = item.ItemId 
    ORDER BY ref.FromItemId DESC 
    FOR XML PATH('') 
) OURF ([Is referenced from]) 

전류 출력

+---------+------------------+--------------------+ 
| Title | Has reference to | Is referenced from | 
+---------+------------------+--------------------+ 
| Title 1 | Title 1, Title 1 | Title 1   | 
+---------+------------------+--------------------+ 
| Title 2 |     | Title 2   | 
+---------+------------------+--------------------+ 
| Title 3 |     | Title 3   | 
+---------+------------------+--------------------+ 
| Title 4 | Title 4   |     | 
+---------+------------------+--------------------+ 
| Title 5 | Title 5   | Title 5   | 
+---------+------------------+--------------------+ 

로 당신은 볼 수 있습니다, 항목 참조 수를 내 예상 된 결과와 일치하지만 참조의 올바른 제목을 가져올 수 없습니다. 누구든지 올바른 제목을 얻을 수 있도록 도와 줄 수 있습니까? 나는 나무를 볼 수없는 데이터 샘플없이 항목 열이없는 심판 나의 무지 죄송

+0

외부 인용문 모두에서 제목 (i.Title이 아님)을 입력하십시오. BTW는 당신의 바이올린이 나를 위해로드되지 않았습니다 (내 연결에 spcific 수 있습니다). –

+0

SQL Fiddle은 나에게 요즘 느리게 작동하지 않습니다. 로드 할 수도 없습니다. 아마도 복사/붙여 넣기를 직접 작성/삽입 문. –

+0

@CetinBasoz'ItemReference' 테이블에'Title' 컬럼이 없습니다 ... –

답변

1

, 나는 :) 생각

SELECT item.Title, 
    ISNULL([Has reference to], '') [Has reference to], 
    ISNULL([Is referenced from], '') [Is referenced from] 
FROM @Item item 
OUTER APPLY 
(
    SELECT i.Title + ', ' 
    FROM @ItemReference ref 
    INNER JOIN @Item i ON ref.ToItemId = i.ItemId 
    WHERE ref.FromItemId = item.ItemId 
    ORDER BY ref.ToItemId DESC 
    FOR XML PATH('') 
) OURT ([Has reference to]) 
OUTER APPLY 
(
    SELECT i.Title + ', ' 
    FROM @ItemReference ref 
    INNER JOIN @Item i ON ref.FromItemId = i.ItemId 
    WHERE ref.ToItemId = item.ItemId 
    ORDER BY ref.FromItemId DESC 
    FOR XML PATH('') 
) OURF ([Is referenced from]); 

링크 ref.To 및 ref.From는 (했다이어야한다 ref.From 및 ref.To).

EDIT : BTW, 제목 3, 제목 2로 주문했기 때문에, 내가 원하는지 확실하지 않습니다.

+0

오, 그래서 내 조인과 단지 실수 였어 ... 고마워. :) –