SQL Server ピボットを使用して毎週のタイムテーブルを生成したいと考えています。
私のデータベースにはこれらのテーブルがあります。
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)が欲しい
私はこのクエリを使用していますが、TimeTable テーブルにレコードを挿入するときに Max(Value) 集計関数を使用しているため、このクエリは列 t1、t2、および t3 に 1 つの値を表示します。ただし、t2 と t3 は null である必要があります
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
たとえば、これらのコマンドを実行した後、すべての列に asp 値が表示されました。
insert Students values('ahmad')
insert TimeTable values(1,1,1,'asp')