0

次のようなスケジュールを表示するために結合したい 2 つの SQL テーブルがあります。

WorkID WorkDesc TaskOneStart TaskOneEnd TaskTwoStart TaskTwoEnd TaskThreeStart TaskThreeEnd TaskFourStart TaskFourEnd
1 ジョブ 1 10:00 11:00 11:00 12:00 13:00 14:00 15:00 16:00
2 ジョブ 2 10:00 11:00 11:00 12:00 13:00 14:00 NULL NULL
3 ジョブ 3 10:00 11:00 NULL NULL NULL NULL NULL NULL
4 ジョブ 4 10:00 11:00 NULL NULL 13:00 14:00 NULL NULL

テーブルワーク
  ID WorkDesc
  1 ジョブ 1
  2 ジョブ 2
  3 ジョブ 3
  4 ジョブ 4

テーブル タスク
  ID WorkID TaskDesc StartTime EndTime
  1 1 タスクワン 10:00 11:00
  2 1 タスクツー 11:00 12:00
  3 1 タスクスリー 13:00 14:00
  4 1 タスクフォー 15:00 16:00
  5 2 タ​​スクワン 10:00 11:00
  6 2 タスクツー 11:00 12:00
  7 2 タスクスリー 13:00 14:00
  8 3 タスクワン 10:00 11:00
  9 4 タスクワン 10:00 11:00
  10 4 タスクスリー 13:00 14:00

私は控えめに言っても SQL 初心者です。私の試みはすべて、4 行ではなく 300 行以上のテーブルになりました。

4

1 に答える 1

1

固定数のタスクを想定すると、次のようになります。

SELECT  W.ID WorkID,
        W.WorkDesc,
        MIN(CASE WHEN TaskDesc = 'TaskOne' THEN StartTime END) TaskOneStart,
        MIN(CASE WHEN TaskDesc = 'TaskOne' THEN EndTime END) TaskOneEnd,
        MIN(CASE WHEN TaskDesc = 'TaskTwo' THEN StartTime END) TaskTwoStart,
        MIN(CASE WHEN TaskDesc = 'TaskTwo' THEN EndTime END) TaskTwoEnd,
        MIN(CASE WHEN TaskDesc = 'TaskThree' THEN StartTime END) TaskThreeStart,
        MIN(CASE WHEN TaskDesc = 'TaskThree' THEN EndTime END) TaskThreeEnd,
        MIN(CASE WHEN TaskDesc = 'TaskFour' THEN StartTime END) TaskFourStart,
        MIN(CASE WHEN TaskDesc = 'TaskFour' THEN EndTime END) TaskFourEnd
FROM dbo.Work W
LEFT JOIN dbo.Task T
    ON W.ID = T.WorkID
GROUP BY W.ID WorkID,
         W.WorkDesc
ORDER BY W.ID WorkID,
         W.WorkDesc
于 2013-11-05T17:51:10.523 に答える