2011-10-27 19 views
1

Sql Server 2008中,我嘗試使用Jira,我有兩個表,並且我有一些這樣的數據;SQL:在查詢中合併主數據和子數據

JIRAISSUE

enter image description here

ISSUELINK

enter image description here

在本例中ID = 16554是一個Main Task。 16555和16556是的16554.正如你在JIRAISSUE中看到的那樣,主任務和所有子任務都是一個問題。他們連接ISSUELINK表,SOURCEDESTINATION列。

我嘗試寫這樣的查詢,但我失敗了。我試圖找到這樣的結果;

enter image description here

正如你可以在圖片中看到的,我要的是;顯示一行基於所有主要任務及其子任務。

我找不到正確的查詢。我怎樣才能做到這一點?

+0

我不確定我完全理解 - 你是否說你想要一個包含主任務和任意數量子任務的單行結果?如果是這樣,我不認爲這是可能的,它基本上是一個多行結果。另外,你是否需要遞歸的答案 - 即包含子任務的子任務? –

+0

不是任意的。他們連接,你可以在'ISSUELINK'表中看到。沒有子任務的子任務。一項主要任務有兩項子任務。我想結合他們。 –

+0

總是有2個子任務(不多不少)嗎?如果這樣擴展@Kip Real查詢:將條件「和i.sequence = 0」添加到第一個內部連接,添加issuelink和jiraissue連接的另一個副本(i2和j3),將條件「和i2.sequence = 1」添加到第二次issuelink加入,添加j3.summary /創建/更新/ resolutiondate到選擇... – Goran

回答

1

試試這個:

SELECT j.ID, j.Pkey, j.SUMMARY, j.CREATED, j.UPDATED, j.RESOLUTIONDATE 
     ,j2.SUMMARY, j2.CREATED, j2.UPDATED, j2.RESOLUTIONDATE 
     ,j3.SUMMARY, j3.CREATED, j3.UPDATED, j3.RESOLUTIONDATE 
FROM Jira.jiraissue As j 
INNER JOIN Jira.issuelink i 
     ON i.SOURCE = j.ID and i.SEQUENCE = 0 
INNER JOIN Jira.jiraissue As j2 
     ON i.DESTINATION = j2.ID 
LEFT JOIN Jira.issuelink i2 
     ON i2.SOURCE = j.ID and i2.SEQUENCE = 1 
LEFT JOIN Jira.jiraissue As j3 
     ON i2.DESTINATION = j3.ID 

左加入支持的情況下,只有一個問題。

+0

這是完美的作品!謝謝Goran。 –

+0

Goran,這種情況下,如果主任務沒有子任務,主任務沒有得到查詢結果。只有主任務獲得了一個或多個子任務。你有什麼想法嗎? –

+0

然後在i和j2上也使用LEFT JOIN。只有匹配記錄存在於連接表中時,內部連接纔會返回記錄。即使連接表中沒有匹配記錄,左連接也會返回記錄。 – Goran

1
SELECT j.ID, j.Pkey, j.SUMMARY, j.CREATED,j.UPDATEED, j.RESOLUTIONDATE 
     ,j2.SUMMARY, j2.CREATED,j2.UPDATEED, j2.RESOLUTIONDATE 
FROM @JIRAISSUE As j 
INNER JOIN @ISSUELINK i 
    ON i.SOURCE =j.ID 
INNER JOIN @JIRAISSUE As j2 
    ON i.DISTINATION =j2.ID 
+0

您的查詢看起來不錯。但它得到兩行的結果。不是一個。它爲每個子任務生成一行。 (16555和16556)。看看這張圖片:http://i.imgur.com/6pzik.jpg如何只顯示一行? –