2012-04-12 42 views
2

我想使用sql server pivot生成每週時間表。如何使用數據透視表來生成每週TimeTable

我的db有這些表。

 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') 

我想有柱(大衛·,DAYNAME,T1,T2,T3)

我使用這個查詢,但因爲使用MAX(值)聚集功能,當我記錄插入時間表表此查詢顯示列T1,T2和t3.however T2和T3一個值應爲空

  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 

例如執行這些CMDS後,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 2012-04-12 16:15:43

+0

歡迎您,如果答案有幫助,那麼請確保您通過左側的複選標記將其標記爲答案。 – Taryn 2012-04-12 16:22:01