1

私はクエリに取り組んでいます:

SELECT P.[Name]+' - '+P.[Description] AS Sprint, S.[Number] AS Story, T.[Name] AS Task
FROM DailyTaskHours D
INNER JOIN Task T ON D.TaskId = T.PK_Task 
INNER JOIN Story S ON T.StoryId = S.PK_Story 
INNER JOIN Sprint P ON S.SprintId = P.PK_Sprint 
GROUP BY  P.[Name], P.[Description], S.[Number], T.[Name]

Sprint 列は NULL の場合とそうでない場合があります。

ここに画像の説明を入力

上記のクエリは、SprintId が関連付けられている場合にのみ、要求された列を返します。NULL の場合、列全体は返されません。Story テーブルで NULL の場合、S.SprintId = P.PK_Sprint は等価ではありません。

NULL の場合でも、他のすべてのテーブルの列データを含む行を返しますが、何も返さないのではなく、KanBan という単語を含む行を返します。どうすればこれを達成できますか?

4

3 に答える 3

2

に変更S.NumberISNULL(S.Number, 'KanBan')ます。これにより、Sprint テーブルに一致する sprintID が見つからない場合に「かんばん」が追加されます。

に変更INNER JOIN Sprint P ON S.SprintId = P.PK_SprintLEFT JOIN Sprint P ON S.SprintId = P.PK_Sprintます。これにより、一致しない場合でも、他のすべてのレコードが引き続き表示されるようになります。

完全なクエリは次のようになります。

SELECT P.[Name]+' - '+P.[Description] AS Sprint, ISNULL(S.Number, 'KanBan') AS Story,     T.[Name] AS Task
FROM DailyTaskHours D
INNER JOIN Task T ON D.TaskId = T.PK_Task 
INNER JOIN Story S ON T.StoryId = S.PK_Story 
LEFT JOIN Sprint P ON S.SprintId = P.PK_Sprint 
GROUP BY  P.[Name], P.[Description], S.[Number], T.[Name]
于 2013-09-17T14:01:10.603 に答える
2
SELECT ISNULL(P.[Name]+' - '+P.[Description],'KanBan') AS Sprint, S.[Number] AS Story, T.[Name] AS Task
FROM DailyTaskHours D
INNER JOIN Task T ON D.TaskId = T.PK_Task 
INNER JOIN Story S ON T.StoryId = S.PK_Story 
LEFT OUTER JOIN Sprint P ON S.SprintId = P.PK_Sprint 
GROUP BY  P.[Name], P.[Description], S.[Number], T.[Name]
于 2013-09-17T14:01:15.603 に答える
1

これを試して

  SELECT P.[Name]+' - '+P.[Description] AS Sprint, S.[Number] AS Story, T.[Name] AS Task
    FROM DailyTaskHours D
    INNER JOIN Task T ON D.TaskId = T.PK_Task 
    INNER JOIN Story S ON T.StoryId = S.PK_Story 
    LEFT OUTER JOIN Sprint P ON S.SprintId = P.PK_Sprint 
    GROUP BY  P.[Name], P.[Description], S.[Number], T.[Name]

内結合と外結合の違いをご覧ください

于 2013-09-17T14:00:43.413 に答える