2015-07-17 3 views
1

Я пытаюсь сделать сводную таблицу, которая поворачивает несколько столбцов разных типов данных, и я немного запутался.t-sql сводные таблицы с несколькими столбцами и типами данных

В настоящее время у меня есть стол с одной строкой для каждого учащегося каждый год в средней школе. В каждой строке содержится много информации о работе студента в этом году: GPA, накопленные кредиты, курсы, взятые на английском и математике, и оценки, полученные в этих классах. Некоторые из этих столбцов являются числовыми, а некоторые - строками. Я хочу создать таблицу с одной строкой для каждого учащегося, в которой есть столбец для GPA 1-го года, GPA 2-го года и 3-го года GPA, год 1 кредита, год 2-го года и третий год кредита и т. Д. Для всех столбцы в исходной таблице.

Прошу прощения, если это сбивает с толку. Я хотел бы дать вам образцы данных, чтобы объяснить, что я имею в виду, но я не могу понять, как загрузить файл или форматировать таблицу.

Сообщите мне, если есть какая-либо другая информация, которую я могу предоставить, что было бы полезно.

+0

Можете ли вы опубликовать запрос PIVOT, который вы предприняли, и что было не так с результатами? –

ответ

1

Вы можете поворачивать несколько столбцов, но это становится довольно уродливым довольно быстро. Вы должны псевдоним столбца поворотного на стольких шарниров, как будет выполняться, так как столбец не может быть повторно использован для последующего поворота. Хорошее соглашение об именах помогает. Наконец, вам нужно будет объединить результаты, обернув все это в группу.

 
with somedata ([StudentID], [Year], [GPA], [Credits], [NumMathCourses]) 
AS (
    SELECT 100, 2013, 3.6, 15, 3 UNION ALL 
    SELECT 100, 2014, 3.7, 12, 1 UNION ALL 
    SELECT 100, 2015, 3.9, 18, 0 UNION ALL 
    SELECT 999, 2012, 2.5, 9, 1 UNION ALL 
    SELECT 999, 2013, 2.9, 12, 0 UNION ALL 
    SELECT 999, 2014, 1.8, 18, 0 
) 

SELECT StudentID 
    ,MAX([2012gpa]) AS [GPA 2012] 
    ,MAX([2013gpa]) AS [GPA 2013] 
    ,MAX([2014gpa]) AS [GPA 2014] 
    ,MAX([2015gpa]) AS [GPA 2015] 
    ,MAX([2012cre]) AS [Credits 2012] 
    ,MAX([2013cre]) AS [Credits 2013] 
    ,MAX([2014cre]) AS [Credits 2014] 
    ,MAX([2015cre]) AS [Credits 2015] 
    ,MAX([2012nmc]) AS [Num Math Courses 2012] 
    ,MAX([2013nmc]) AS [Num Math Courses 2013] 
    ,MAX([2014nmc]) AS [Num Math Courses 2014] 
    ,MAX([2015nmc]) AS [Num Math Courses 2015] 

FROM (
    SELECT StudentID 
     ,CONCAT([Year], 'gpa') AS Year_GPA 
     ,CONCAT([Year], 'cre') AS Year_Credits 
     ,CONCAT([Year], 'nmc') AS Year_NumMathCourses 
     ,GPA 
     ,Credits 
     ,NumMathCourses 
    FROM somedata 
) [data] 

PIVOT (
    MAX(GPA) FOR Year_GPA IN (
     [2012gpa], [2013gpa], [2014gpa], [2015gpa] 
    ) 
) [pivot_gpa] 

PIVOT (
    MAX(Credits) FOR Year_Credits IN (
     [2012cre], [2013cre], [2014cre], [2015cre] 
    ) 
) [pivot_Credits] 

PIVOT (
    MAX(NumMathCourses) FOR Year_NumMathCourses IN (
     [2012nmc], [2013nmc], [2014nmc], [2015nmc] 
    ) 
) [pivot_NumMathCourses] 

GROUP BY StudentID 
Смежные вопросы