繁体   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