[英]Combine rows from self-referenced table
對於Excel導出,我必須在每個項目中添加兩列,並包含其所有“具有引用至”和“具有引用自”項。
我的桌子
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)
FromItemId
和ToItemId
都包含表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 |
+---------+------------------+--------------------+
如您所見,項目引用的數量與我的預期結果相符,但是我沒有獲得正確的引用標題。 誰能幫助我獲得正確的頭銜?
很抱歉,我的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.