Tsql 如何使用pivot生成每周时间表
我想使用SQLServerPivot生成每周时间表 我的数据库有这些表Tsql 如何使用pivot生成每周时间表,tsql,sql-server-2000,pivot,Tsql,Sql Server 2000,Pivot,我想使用SQLServerPivot生成每周时间表 我的数据库有这些表 create table Students ( StudentID int identity primary key, Name nvarchar(50) ) create table Times ( TimeID int identity primary key
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)
我正在使用此查询,但由于在向时间表表中插入记录时使用了Max(Value)聚合函数,因此此查询为t1、t2和t3列显示一个值。但是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')
你错过了一场从时间表到时间的比赛:
AND dbo.Times.TimeID = dbo.TimeTable.TimeID
你错过了一场从时间表到时间的比赛:
AND dbo.Times.TimeID = dbo.TimeTable.TimeID
你很接近,试试这个:
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
你很接近,试试这个:
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
不客气,如果答案有帮助,请确保通过左侧的复选标记将其标记为答案。不客气,如果答案有帮助,请确保通过左侧的复选标记将其标记为答案。