【问题标题】:Joining multiple records into one with PIVOT使用 PIVOT 将多条记录合并为一条
【发布时间】:2013-06-12 23:39:42
【问题描述】:

我在 SQL Server 2005 中有一个具有以下结构的表:

ID    Day     DayDate    TimeEntry  TimeOut   Rest     Monday
1   Monday   17-06-2013   08:00      18:00    14:30   17-06-2013
2   Tuesday  18-06-2013   08:00      18:00    14:30   17-06-2013

直到每周星期一字段允许我对给定一周的所有天进行分组。

现在我需要在视图中的一条记录中收集数据:

Id DayDateMonday TimeEntryMonday TimeOutMonday RestMonday 
   DayDateTuesday TimeEntryTuesday TimeOutTuesday RestTuesday .... so on.

有什么帮助吗?

【问题讨论】:

    标签: sql sql-server-2005 pivot


    【解决方案1】:

    虽然在 SQL Server 2005 及更高版本中支持 PIVOT 子句,但在您的情况下手动旋转数据可能会更好,即借助分组和条件聚合。

    不过,请注意:Id,如果它是原始表中的 ID 列,在您看来将毫无意义。每一天都有自己的 ID,并且您的视图连续几天聚集,因此在其中放置一个 ID 似乎没有任何意义。因此,出于此答案的目的,我将其替换为一周中的星期一的日期(Monday 列,重命名为 WeekDate 用于输出)。

    除此之外,这是您的旧“手动”支点:

    SELECT
      WeekDate = Monday,
    
      DayDateMonday   = MAX(CASE Day WHEN 'Monday' THEN DayDate   END),
      TimeEntryMonday = MAX(CASE Day WHEN 'Monday' THEN TimeEntry END),
      TimeOutMonday   = MAX(CASE Day WHEN 'Monday' THEN TimeOut   END),
      RestMonday      = MAX(CASE Day WHEN 'Monday' THEN Rest      END),
    
      DayDateTuesday   = MAX(CASE Day WHEN 'Tuesday' THEN DayDate   END),
      TimeEntryTuesday = ...  -- and so on
    
    FROM timetable
    GROUP BY
      Monday
    ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多