0

我有两个要加入的 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 NULL
4 作业 4 10:00 11:00 NULL NULL 13:00 14:00 NULL NULL

餐桌工作
  ID 工作描述
  1 工作 1
  2 工作 2
  3 工作 3
  4 工作 4

表任务
  ID WorkID TaskDesc StartTime EndTime
  1 1 TaskOne 10:00 11:00
  2 1 任务二 11:00 12:00
  3 1 任务三 13:00 14:00
  4 1 任务四 15:00 16:00
  5 2 TaskOne 10:00 11:00
  6 2 任务二 11:00 12:00
  7 2 任务三 13:00 14:00
  8 3 TaskOne 10:00 11:00
  9 4 TaskOne 10:00 11:00
  10 4 任务三 13:00 14:00

至少可以说,我是一个 SQL 新手。我所有的尝试都导致了一个有 300 多行而不是 4 行的表。任何帮助将不胜感激。

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 回答