2016-05-21 6 views
1

私のテーブルから行列を返そうとしています。 私の二つのテーブルは次のようになります。動的SQLを使用

**Employe_Course_Instance** 
PersonNumber Year Period CourseCode Hour 
111   2015 3  a1   10 
222   2016 4  a2   4 
333   2018 2  a3   8 
444   2015 1  a4   5 

**Employe** 
PersonNumber FirstName LastName Salary Type 
    111   A  LA  100 teacher 
    222   B  LB  120 teacher 
    333   C  LC  150 teacher 
    444   D  LD  120 teacher 

私は、テーブルには次のようになります必要があります。CourseCodeと期間はCourseCode /期間のようなテーブル内のデータとなり、唯一の4つのピリオドを含めることができます 。コースコード/期間で行に表示される給与。

FirstName LastName a1/3 a2/4 a3/2 a4/1 Hours 
    A   LA 100     10 
    B   LB   120    4 
    C   LC    150  8 
    D   LD     120 5 

と、これは私はあなたがあなたのインラインのtable aliasが欠落しているのではい、それはだ私は>

Msg 156, Level 15, State 1, Line 10 
Incorrect syntax near the keyword 'pivot'. 

答えて

1

ようにする必要があります。したがって

select * from 
(select 
employe.firsname, employe.lastname, 
Employe_Course_Instance.coursecode + ''/'' + 
CAST(Employe_Course_Instance.period as varchar (50)) as CourseCode_Period, 
Employe_Course_Instance.year, Employe_Course_Instance.hours 
from 
employe inner join Employe_Course_Instance on employe.personnumber = 
Employe_Course_Instance.personnumber) AS pvtTable 

pivot(

PIVOT documentation

+0

ありがとうございました!私はそれを行ったが、今は別のエラーを返します: メッセージ8117、レベル16、状態1、行1 オペランドのデータ型ncharは、合計演算子では無効です。 メッセージ8156、レベル16、状態1、行1 'pivot_table'に列 'a3'が複数回指定されました。 –

1

をGET- this->

declare @ColumnNames nvarchar(max) 
declare @SQL nvarchar(max) 

set @SQL = '' 
set @ColumnNames = '' 
select @ColumnNames = @ColumnNames + quotename (coursecode) + ',' 
from bemaning 

set @ColumnNames = left (@ColumnNames, len (@ColumnNames) - 1) 

print @ColumnNames 

set @SQL = 
'select * from 
(select 
employe.firsname, employe.lastname, 
Employe_Course_Instance.coursecode + ''/'' + CAST(Employe_Course_Instance.period as varchar (50)) as CourseCode_Period, 
Employe_Course_Instance.year, Employe_Course_Instance.hours 
from 
employe inner join Employe_Course_Instance on employe.personnumber = Employe_Course_Instance.personnumber) 


pivot(
    sum(hour) 
    for CourseCode_Period in (' + @ColumnNames +') 

) as pivot_table' 

--print @SQL 
execute sp_executesql @SQL 

エラーをしようとする方法です。ビュー。それは

あなたが FROM文の後 alias

AS <alias for the source query> 

を追加する必要が

on employe.personnumber = Employe_Course_Instance.personnumber) XXX 
                   ^... Here 
pivot(
sum(hour) 
for CourseCode_Period in (' + @ColumnNames +') 
..... 
+0

を持つことありがとうございます!私はそれを行ったが、今それは別のエラーを与える:メッセージ8117、レベル16、状態1、行1オペランドデータ型ncharは、合計演算子のために無効です。メッセージ8156、レベル16、状態1、行1 'pivot_table'の列 'a3'が複数回指定されました。 –

関連する問題