首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pivot生成每周TimeTable

如何使用pivot生成每周TimeTable
EN

Stack Overflow用户
提问于 2012-04-12 23:30:59
回答 2查看 441关注 0票数 2

我想使用sql server pivot生成每周时刻表。

我的数据库里有这些表格。

代码语言:javascript
复制
        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(值)聚合函数,此查询显示列t1、t2和t3有一个值。但是,t2和t3应为null

代码语言:javascript
复制
            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值都会显示出来。

代码语言:javascript
复制
        insert Students values('ahmad')
            insert TimeTable values(1,1,1,'asp') 
EN

回答 2

Stack Overflow用户

发布于 2012-04-12 23:58:15

你错过了一个从TimeTable到Times的匹配:

代码语言:javascript
复制
 AND dbo.Times.TimeID = dbo.TimeTable.TimeID
票数 0
EN

Stack Overflow用户

发布于 2012-04-13 00:02:36

你已经很接近了,试试这个:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10126838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档