2

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

2 に答える 2

0

TimeTable から Times への一致がありません:

 AND dbo.Times.TimeID = dbo.TimeTable.TimeID
于 2012-04-12T15:58:15.423 に答える
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
于 2012-04-12T16:02:35.580 に答える