SQL изменить таблицу в другой формат - PullRequest
0 голосов
/ 16 октября 2019

У меня есть такая таблица:

Faculty  Program                Number_of_enrolled
Science  Financial Modelling    25
Science  Actuarial Science      30
Science  Statistics             28
Science  Biology                16

Я хочу использовать SQL, чтобы изменить таблицу на что-то вроде этого:

Faculty  Financial Modelling  Actuarial Science  Statistics  Biology
Science  25                   30                 28          16

Что мне делать?

Ответы [ 3 ]

2 голосов
/ 16 октября 2019

Использовать условную агрегацию:

select 
    faculty,
    max(case when program = 'Financial Modelling' then number_of_enrolled end) [Financial Modelling],
    max(case when program = 'Actuarial Science' then number_of_enrolled end) [Actuarial Science],
    max(case when program = 'Statistics' then number_of_enrolled end) Statistics,
    max(case when program = 'Biology' then number_of_enrolled end) Biology
from mytable 
group by faculty
1 голос
/ 16 октября 2019

Вы можете сделать это, используя Pivot

select * from test
pivot (max (num) for program in 
([Financial Modelling],[Actuarial Science],[Statistics],[Biology])) 
as Programs

http://sqlfiddle.com/#!18/0159f/3

0 голосов
/ 16 октября 2019

Подобно GMB, вы можете использовать динамический sql, как показано ниже, чтобы сделать тот же самый поворот, чтобы получить все столбцы

declare @cols varchar(max)
declare @query nvarchar(max)

select @cols = stuff((select ','+QuoteName(Program) from facultytable group by Program for xml path('')),1,1,'')

SET @query = 'select faculty, ' + @cols + ' from ( ' + ' select faculty, Program, Number_of_enrolled from facultytable ) a ' 
SET @Query = @query + ' pivot (max([Number_of_enrolled]) for Program in (' + @cols + ')) p '

--select @query --Execute below by uncommenting after checking the query
exec sp_executesql @query

Вывод, как показано ниже:

+---------+-------------------+---------+---------------------+------------+
| faculty | Actuarial Science | Biology | Financial Modelling | Statistics |
+---------+-------------------+---------+---------------------+------------+
| Science |                30 |      16 |                  25 |         28 |
+---------+-------------------+---------+---------------------+------------+

Код здесь: https://rextester.com/LFSP20314

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...