Я пытаюсь написать запрос с некоторыми необычными объединениями.Я знаю, что это можно сделать, но я не помню, как это сделать.
Вот мой запрос, как он есть сейчас:
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'
Я пытался заставить это работать безпредложение select
в части from
моего запроса, но оно все время ускользает от меня.
Результат, который я ищу, следующий:
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
Я получаю этот результатиспользуя select
в предложении from
, но я бы не стал использовать select
там, если смогу избежать этого.
Я попытался внести следующие изменения:
- Раскомментируйте последнее соединение (и
childLinkType.LinkName
в главном предложении select) - Удалите нежелательное предложение
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
Это слишком много строк.И я не хочу совпадения значений 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 из первого набора данных).Я все еще нуждаюсь в них в своих результатах.
Любые идеи, как я могу удалить select (в предложении from) и все еще получить это, чтобы дать мне первый набор результатов?
ПРИМЕЧАНИЕ: Iя запускаю это для базы данных TFS_Warehouse на сервере TFS 2010 (используя таблицы, утвержденные для составления отчетов).