【问题标题】:Inner join a SQL Pivot table内部联接 SQL 数据透视表
【发布时间】:2012-12-02 10:47:22
【问题描述】:

我似乎无法内部加入教师表以获得名字和姓氏。

select * 
from BookingDays bd
inner join Teachers t 
  on t.ID = bd.TeacherID
pivot 
(
  max (bd.BookingDuration) 
  for bd.DayText in ([MONDAY], [TUESDAY], [WEDNESDAY], [THURSDAY], [FRIDAY])
) as MaxBookingDays
where bd.BookingDate >= (SELECT DATEADD(ww, DATEDIFF(ww,0,GETDATE()), 0)) and   
   bd.BookingDate <= (SELECT DATEADD(ww, DATEDIFF(ww,0,GETDATE()), 6)) '

我得到的错误信息是 -

Msg 8156, Level 16, State 1, Line 3
The column 'ID' was specified multiple times for 'MaxBookingDays'.
Msg 4104, Level 16, State 1, Line 4
The multi-part identifier "bd.BookingDate" could not be bound.
Msg 4104, Level 16, State 1, Line 4
The multi-part identifier "bd.BookingDate" could not be bound.

【问题讨论】:

    标签: sql sql-server tsql pivot


    【解决方案1】:

    下面的错误是因为你没有指定你的列:

    消息 8156,第 16 级,状态 1,第 3 行

    为“MaxBookingDays”多次指定了“ID”列。

    所以我会把你的查询稍微改成这样:

    select *
    from
    (
      -- don't use select *, call out your fields
      -- and use a sub-query with your WHERE inside the subquery
      select bd.BookingDuration, bd.Otherfields, t.Fields
      from BookingDays bd
      inner join Teachers t 
        on t.ID = bd.TeacherID
      where bd.BookingDate >= (SELECT DATEADD(ww, DATEDIFF(ww,0,GETDATE()), 0)) and   
        bd.BookingDate <= (SELECT DATEADD(ww, DATEDIFF(ww,0,GETDATE()), 6))
    ) src
    pivot 
    (
      max (BookingDuration) 
      for DayText in ([MONDAY], [TUESDAY], [WEDNESDAY],[THURSDAY], [FRIDAY])
    ) as MaxBookingDays
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多