2011-10-27 17 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如何只显示一行? –