1

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

SELECT D.PointPerson AS Person, R.[Name] AS Project, ISNULL(P.[Name]+' - '+P.[Description], 'KanBan') AS Sprint, S.[Number] AS Story, T.[Name] AS Task,
   sum(CASE WHEN DatePart(dw, D.ActivityDate) = 1 THEN D.[Hours] ELSE 0 END) AS Monday,
   sum(CASE WHEN DatePart(dw, D.ActivityDate) = 2 THEN D.[Hours] ELSE 0 END) AS Tuesday,
   sum(CASE WHEN DatePart(dw, D.ActivityDate) = 3 THEN D.[Hours] ELSE 0 END) AS Wednesday,
   sum(CASE WHEN DatePart(dw, D.ActivityDate) = 4 THEN D.[Hours] ELSE 0 END) AS Thursday,
   sum(CASE WHEN DatePart(dw, D.ActivityDate) = 5 THEN D.[Hours] ELSE 0 END) AS Friday,
   sum(CASE WHEN DatePart(dw, D.ActivityDate) = 6 THEN D.[Hours] ELSE 0 END) AS Saturday,
   sum(CASE WHEN DatePart(dw, D.ActivityDate) = 7 THEN D.[Hours] ELSE 0 END) AS Sunday,
   sum(D.[Hours]) AS Total
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 
INNER JOIN Product R ON S.ProductId = R.PK_Product
GROUP BY D.PointPerson, R.[Name], P.[Name], P.[Description], S.[Number], T.[Name]
ORDER BY CASE WHEN ISNULL(P.[Name]+' - '+P.[Description], 'KanBan') = 'KanBan'
    THEN 1
    ELSE 0 END,
    Project ASC,
    Sprint ASC,
    Story ASC,
    Task ASC

ご覧のとおり、多くのテーブルの列がまとめられています。

ベース テーブル (DailyTaskHours) との関係を持つ 2 つのテーブルがあります。

ここに画像の説明を入力

現在、私のクエリは、上記のスキーマの右側へのすべての関係を取得します。これらすべてのケースで、DailyTaskHours の列 NonScrumStoryId は NULL です。同じクエリの一部として、NonScrumSoryId が NULL のものを含むすべての DailyTaskHours エントリを返したいと思います。この場合、Task、Story、Sprint、または Product テーブルへの接続はありません。

現在、テーブルは次のようになっています。 ここに画像の説明を入力

したがって、行が NonScrumStory 行である場合、つまり、この行の列が null ではなかった場合、以下のテーブルに入力されますが、Project、Sprint、および Task はすべて NULL になります。ストーリーは NonScrumStory.IncidentNumber から取得されます

どうすればこれを行うことができますか?

4

2 に答える 2

2

変化する

INNER JOIN Task T ON D.TaskId = T.PK_Task 

LEFT JOIN Task T ON D.TaskId = T.PK_Task 

LEFT 結合は、結合句で一致しない場合、from 句でテーブルから行を切り出しません。

また、NonScrumStoryId に左結合を追加してから、select を次のように変更します。

COALESCE(S.[Number], NonScrumStoryId.IncidentNumber)

COLLASCE は、最初の引数が null かどうかをチェックし、そうであれば 2 番目の引数を返します。この場合、ストーリーが null の場合、代わりに IncidentNumber が返されます。

于 2013-09-17T21:03:21.413 に答える
1

次のような意味ですか。

CASE
WHEN S.[Number] is null
THEN NonScrumStory.IncidentNumber
ELSE S.[Number]
END
as Story

? Story-field の定義をこれに置き換えて、試してください...

于 2013-09-17T21:06:54.917 に答える