2011-10-27 9 views
1

Sql Server 2008では、Jiraを使用しようとしましたが、2つのテーブルがあり、このようなデータがあります。SQL:クエリのメインデータとサブデータを組み合わせる

JIRAISSUE

enter image description here

ISSUELINK

enter image description here

この例では、ID = 16554がMain Taskあります。 16555および16556はSub Tasks/16554です。JIRAISSUEのように、メインタスクとすべてのサブタスクが問題になります。そして彼らはSOURCEDESTINATIONの列にISSUELINKの表で接続しました。

このようなクエリを作成しようとしましたが、失敗しました。私はこのような結果を見つけようとします。あなたが写真で見ることができるように

enter image description here

、私が欲しいのです。すべてのメインタスクとそのサブタスクに基づいて1つの行が表示されます。

私はこれについて正しい質問を見つけることができません。どうやってやるの?

+0

主なタスクと任意の数のサブタスクを含む1つの行からなる結果が必要だと言っていますか?もしそうなら、私はそれが可能だとは思わない、それは基本的に複数行の結果である。また、サブタスクのサブタスクを含めるなど、再帰的な答えが必要ですか? –

+0

これは恣意的ではありません。彼らはあなたが 'ISSUELINK'テーブルで見ることができるように接続しました。サブタスクのサブタスクはありません。主なタスクの1つに2つのサブタスクがあります。そして私はそれらを組み合わせたい。 –

+0

常に2つのサブタスクがありますか?最初の内部結合に条件 "とi.sequence = 0"を追加し、issuelinkとjiraissue結合(i2とj3)の別のコピーを追加し、条件 "and i2.sequence = 1"を次のように追加します。 2番目のissuelink joinは、j3.summary/created/updated/resolutiondateをselectに追加します。 – 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

これは完璧な作品です!おかげでゴラン。 –

+0

ゴラン、その場合、メインタスクにサブタスクがない場合、メインタスクはクエリの結果を取得しません。メインタスクには、結果に1つ以上のサブタスクがあります。あなたはこれについて何か考えていますか? –

+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

あなたのクエリは素晴らしいようです。しかし、結果は2行になります。ない1。各サブタスクに対して行を生成します。 (16555および16556の場合)。この写真を見てください:http://i.imgur.com/6pzik.jpgどのようにして1行だけ表示できますか? –

関連する問題