我想用一些奇特的连接写一个查询。我知道这可以做到,但我不记得如何去做。将两张表重新连接在一起
这里是我的查询,因为它现在是:
SELECT parentLink.SourceWorkItemID, parentLink.TargetWorkItemID,
childLink.SourceWorkItemID, childLink.TargetWorkItemID,
childLink.WorkItemLinkTypeSK--,childLinkType.LinkName
FROM dbo.FactWorkItemLinkHistory parentLink
JOIN dbo.DimWorkItemLinkType parentLinkType (NOLOCK)
ON parentLink.WorkItemLinkTypeSK = parentLinkType.WorkItemLinkTypeSK
LEFT JOIN dbo.FactWorkItemLinkHistory childLink (NOLOCK)
ON parentLink.TargetWorkItemID = childLink.SourceWorkItemID
AND childLink.RemovedByPersonSK IS NULL
AND childLink.WorkItemLinkTypeSK IN
(SELECT sublink.WorkItemLinkTypeSK
FROM dbo.DimWorkItemLinkType sublink
WHERE sublink.LinkName = 'Child'
)
--LEFT JOIN dbo.DimWorkItemLinkType childLinkType (NOLOCK)
-- ON childLink.WorkItemLinkTypeSK = childLinkType.WorkItemLinkTypeSK
-- AND childLinkType.LinkName = 'Child'
WHERE parentLink.SourceWorkItemID = 1917
AND parentLink.RemovedByPersonSK IS NULL
AND parentLinkType.LinkName = 'Releases Story'
我试图让这没有我的查询中的from
部分select
条款运行,但它一直躲避我。
我正在寻找的结果是这样的东西:
1917 1915 1915 1916 2
1917 1913 1913 1914 2
1917 1913 1913 4349 2
1917 1921 1921 1922 2
1917 1918 NULL NULL NULL
1917 1920 NULL NULL NULL
我得到的from
子句中使用select
这一结果,但我宁可不使用select
那里,如果我能避免它。
我试图使这些改变:
- 取消对最后一个加入(和主SELECT子句中
childLinkType.LinkName
) - 删除不需要的
select
条款(上面的最后一个加入行)。
当我做我得到这个:
1917 1915 1915 1916 2 Child
1917 1915 1915 1917 20 NULL
1917 1915 1915 1919 7 NULL
1917 1915 1915 1911 4 NULL
1917 1913 1913 1914 2 Child
1917 1913 1913 1917 20 NULL
1917 1913 1913 1911 4 NULL
1917 1913 1913 4349 2 Child
1917 1921 1921 1922 2 Child
1917 1921 1921 1917 20 NULL
1917 1918 1918 1919 7 NULL
1917 1918 1918 1912 4 NULL
1917 1918 1918 1917 20 NULL
1917 1920 1920 1911 4 NULL
1917 1920 1920 1917 20 NULL
也就是说太多行。而且我不想在DimWorkItemLinkType表上匹配空值。所以我让最后一个连接成为内部连接。然后,我得到这个:
1917 1915 1915 1916 2 Child
1917 1913 1913 1914 2 Child
1917 1913 1913 4349 2 Child
1917 1921 1921 1922 2 Child
这已经删除了没有(从第一个数据集1918年至1920年),“儿童”的项目。我的结果仍然需要他们。
任何想法我可以删除选择(在从条款),仍然得到这个给我的第一组结果?
注意:我对TFS 2010服务器上的TFS_Warehouse数据库运行此操作(使用经过批准用于报告目的的表)。
好像如果你一般提出的问题(如你的标题所暗示的),你可能会得到更多的答案,而不是给我们一个具体的问题。似乎没有人想要解决这个问题。只是一个想法。 :-P – richard 2011-03-10 05:30:32
如果你只是想摆脱子查询,那么我建议你可以使用临时表并在其上运行连接。 – pavanred 2011-03-10 06:22:18
我没有运行TFS_Warehouse。您已发布输出,但省略了输入。如果您发布给定输出的实际投入,更多人将能够为您提供帮助。 – 2011-03-10 07:17:18