2012-12-14 2 views
2

첫 번째 및 성을 얻으려면 교사 테이블에 내부 조인하는 것 같습니다.내부는 SQL 피벗 테이블을 결합합니다

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. 

답변

4

당신이 당신의 열이 지정되어 있지 않기 때문에 아래의 오류는 다음과 같습니다, 수준 16, 메시지 8156 주 1

, 줄 3

'MaxBoo'에 대해 '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