2016-09-25 8 views
0

で列のタイトルとして、私は学生の不在情報が含まれているテーブルを持って、私はStudentNameを表示するには、そのテーブルからCTEを行い、CNAMEコラムのタイトルとそれぞれの不在時間など各コースの学生。 これは私のCTEコードです:表示行データのSQL Server 2014でのCTE

DECLARE @SummaryTable TABLE 
(
    SName nvarchar(50),-- Student Name 
    CName nvarchar(50) -- Course Name 
) 
    INSERT INTO @SummaryTable(SName, CName) 
    SELECT Student_tbl.SName,Sum_Abs from Absence_Summary_tbl 
    inner join Student_tbl on Student_tbl.S_ID = Absence_Summary_tbl.S_ID 
    inner join Stages_tbl on Stages_tbl.Stage_ID = Student_tbl.Stage_ID 
    where Stages_tbl.Stage_ID = 1; 
WITH CTE AS (
SELECT SName, CName, 
     ROW_NUMBER() OVER(PARTITION BY SName ORDER BY CName) AS rn FROM @SummaryTable) 
SELECT SName, 
     MAX(CASE WHEN rn=1 THEN CName ELSE 0 END) AS CName1, 
     MAX(CASE WHEN rn=2 THEN CName ELSE 0 END) AS CName2, 
     MAX(CASE WHEN rn=3 THEN CName ELSE 0 END) AS CName3 
FROM CTE 
GROUP BY SName; 

CTEの結果は下の画像のように表示される:それはコラムのタイトルとしてCName1、CName2、CName3とコース名を表示結果に

http://i68.tinypic.com/1zlsz9v.png[/IMG]

コース名の列タイトルとしてエイリアスを除いて実際のコース名を表示する方法はありますか? Absence_Summary_tbl 'という名前の列にコース名があります。です。

+0

出力結果と入力データを提供できますか?あなたが言及した画像にはデータがありません。 –

+0

サンプルクエリは、CNameがsum_absではなくコース名を保存していないことを示しています。テーブル変数に[SName、CName、Sum_Abs]を挿入します。 – p2k

答えて

0

@SummaryTableであなたの代わりにCourseNameのsum_Absを挿入され、 @SummaryTableは、3列SNAME、CNAMEを持ってSum_Abs(もちろんあたり学生一人当たり欠席回数を格納する)

なければならないのCTEの必要はありません達成するには 代わりにピボットを使用してください: -

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT ',' + QUOTENAME(CName) 
        from Absence_Summary_tbl 
        group by CName 
        order by CName 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT SName,' + @cols + ' from 
      (
       select SName, CName, Sum_Abs 
       from @SummaryTable 
      ) x 
      pivot 
      (
       sum(Sum_Abs) 
       for CName in (' + @cols + ') 
      ) p ' 

execute(@query); 
+0

あなたの答えをありがとう、コードを実行すると、エラーが発生します。 'テーブル変数を宣言する必要があります。' SummaryTable ''、ピボットにもSummaryTableが必要ですか、このエラーは何ですか? –

+0

はいあなたは以下のようにテーブル変数を宣言する必要があります: - 、学生の名前 CNAMEのデータ型はnvarchar(50) - - 、 ( SNAMEのデータ型はnvarchar(50)@SummaryTable TABLEを宣言コース名 Sum_Absはint型 - 学生一人当たり欠席回数コースごとに ) –