簡體   English   中英

合並自引用表中的行

[英]Combine rows from self-referenced table

對於Excel導出,我必須在每個項目中添加兩列,並包含其所有“具有引用至”和“具有引用自”項。

這是我的SQL Fiddle,其中包括我的表和結果。

我的桌子

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)

FromItemIdToItemId都包含表ItemItemId

預期產量

+---------+------------------+--------------------+
| 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            |
+---------+------------------+--------------------+

如您所見,項目引用的數量與我的預期結果相符,但是我沒有獲得正確的引用標題。 誰能幫助我獲得正確的頭銜?

很抱歉,我的ref沒有item列,沒有數據示例,我看不到我認為的樹:)

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)。

編輯:順便說一句,由於順序是標題3,標題2。我不確定這是否是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM