2012-04-12 3 views
2

SQL Server 피벗을 사용하여 매주 시간표를 생성하고 싶습니다.피벗을 사용하여 매주 TimeTable을 생성하는 방법

내 데이터베이스에는 이러한 테이블이 있습니다.

 create table Students 
     (
      StudentID int identity primary key, 
      Name nvarchar(50) 
     ) 
     create table Times 
     (
      TimeID int identity primary key 
      ,Name nvarchar(10) 
     ) 
     create table Days 
     (
      DayID int identity primary key 
      ,Name nvarchar(20) 
     ) 
     create table TimeTable 
     (
      StudentID int references Students(StudentID) 
      ,TimeID int references Times(TimeID) 
      ,DayID int references Days(DayID) 
      ,Value nvarchar(50) 
     ) 

     insert Times values('t1') 
     insert Times values('t2') 
     insert Times values('t3') 



     insert Days values('sunday') 
     insert Days values('monday') 
     insert Days values('tuesday') 
     insert Days values('wednesday') 
     insert Days values('thursday') 
     insert Days values('friday') 
     insert Days values('saturday') 

내가 열 (DayID, DAYNAME, T1, T2, T3)

내가이 쿼리를 사용하고 있지만, 때문에 최대 (값) 집계 함수를 사용하는 내가 시간표에 레코드를 삽입 할 때를 갖고 싶어 테이블이 쿼리 CMDS 후이 실행 예

  SELECT  * 
      FROM   (SELECT  dbo.Days.DayID, dbo.Days.Name, dbo.Times.Name AS Expr1, dbo.TimeTable.Value 
      FROM   dbo.Times CROSS JOIN 
            dbo.Days LEFT OUTER JOIN 
            dbo.TimeTable ON dbo.Days.DayID = dbo.TimeTable.DayID) AS d_1 
      PIVOT (max (Value) FOR [Expr1] 
      IN (t1, t2, t3)) AS P 

NULL이어야 열 T1, T2 및 t3.however T2 및 T3에 대해 하나 개의 값을 보여, ASP 값은 모든 열에 나타냈다.

 insert Students values('ahmad') 
      insert TimeTable values(1,1,1,'asp') 

답변

0

당신은 시간에 시간표에서 경기를 놓치고 :

AND dbo.Times.TimeID = dbo.TimeTable.TimeID 
0

당신이 매우 가까운이 시도되었다 :

create table #Students 
(
    StudentID int identity primary key, 
    Name nvarchar(50) 
) 
create table #Times 
(
    TimeID int identity primary key 
    ,Name nvarchar(10) 
) 
create table #Days 
(
    DayID int identity primary key 
    ,Name nvarchar(20) 
) 
create table #TimeTable 
(
    StudentID int references #Students(StudentID) 
    ,TimeID int references #Times(TimeID) 
    ,DayID int references #Days(DayID) 
    ,Value nvarchar(50) 
) 

insert #Times values('t1') 
insert #Times values('t2') 
insert #Times values('t3') 

insert #Days values('sunday') 
insert #Days values('monday') 
insert #Days values('tuesday') 
insert #Days values('wednesday') 
insert #Days values('thursday') 
insert #Days values('friday') 
insert #Days values('saturday') 

insert #Students values('ahmad') 
insert #TimeTable values(1,1,1,'asp') 

SELECT * 
FROM 
(
    SELECT  d.DayID, d.Name, t.Name AS Expr1, tt.Value 
    FROM   #Times t 
    CROSS JOIN #Days d 
    LEFT OUTER JOIN #TimeTable tt 
     ON d.DayID = tt.DayID 
     AND t.TimeID = tt.TimeID) AS d_1 
PIVOT (max (Value) FOR [Expr1] 
IN (t1, t2, t3)) AS P 


drop table #Students 
drop table #Times 
drop table #Days 
drop table #TimeTable 
+0

덕분에 많이 답안 bluefeet을 위해. 대답이 도움이된다면 – user1329379

+0

당신은 환영합니다, 그렇다면 당신은 왼쪽에있는 체크 표시를 통해 답을 표시했는지 확인하십시오. – Taryn

관련 문제