МиСКЛ Пивот: ротирање редова у колоне

Mysql Pivot Rotating Rows Columns



Таблица базе података може похранити различите врсте података, а понекад морамо претворити податке на нивоу ретка у податке на разини колоне. Овај проблем се може решити коришћењем функције ПИВОТ (). Ова функција се користи за ротирање редова табеле у вредности колона. Али ову функцију подржава врло мали број сервера база података, као што су Орацле или СКЛ Сервер. Ако желите да обавите исти задатак у табели МиСКЛ базе података, морате написати упит СЕЛЕЦТ користећи израз ЦАСЕ да бисте ротирали редове у колоне. Чланак приказује начин обављања задатка функције ПИВОТ () у сродним табелама МиСКЛ базе података.

Предуслов:

Морате да креирате базу података и неке повезане табеле у којима ће се редови једне табеле претворити у колоне попут функције ПИВОТ (). Покрените следеће СКЛ изразе да бисте креирали базу података под називом „ унидб “И креирајте три табеле под називом„ студенти ',' курсеви ' и ' резултат '. студенти и резултат табеле ће бити повезане односом један према више и курсеви и резултати Овде ће табеле бити повезане односом један према више. ЦРЕАТЕ изјава датотеке резултат табела садржи два ограничења страног кључа за поља, стд_ид , и цоурсе_ид .







ЦРЕАТЕ ДАТАБАСЕ унидб;
УСЕ унидб;

КРЕИРАЈТЕ ТАБЕЛУ ученика(
идИНТ ПРИМАРНИ КЉУЧ,
име варцхар(педесет)НИЈЕ НУЛА,
одељење ВАРЧАР(петнаест)НОТ НУЛЛ);

ЦРЕАТЕ ТАБЛЕ курсеви(
цоурсе_ид ВАРЦХАР(двадесет)ПРИМАРНИ КЉУЧ,
име варцхар(педесет)НИЈЕ НУЛА,
кредит СМАЛЛИНТ НОТ НУЛЛ);

ЦРЕАТЕ ТАБЛЕ резултат(
стд_ид ИНТ НОТ НУЛЛ,
цоурсе_ид ВАРЦХАР(двадесет)НИЈЕ НУЛА,
марк_типе ВАРЦХАР(двадесет)НИЈЕ НУЛА,
ознаке СМАЛЛИНТ НОТ НУЛЛ,
СТРАНИ КЉУЧ(стд_ид)ЛИТЕРАТУРА студенти(ид),
СТРАНИ КЉУЧ(цоурсе_ид)ЛИТЕРАТУРА курсеви(цоурсе_ид),
ПРИМАРНИ КЉУЧ(стд_ид, цоурсе_ид, марк_типе));

Уметните неке записе у студенти, курсеви и резултат табеле. Вредности се морају уметнути у табеле на основу ограничења постављених у време креирања табеле.



УМЕТНИТЕ Вредности ученика
( '1937463','Харпер Лее',„ЦСЕ“),
( '1937464','Гарциа Маркуез',„ЦСЕ“),
( '1937465','Форстер, Е.М.',„ЦСЕ“),
( '1937466','Ралпх Еллисон',„ЦСЕ“);

ИНСЕРТ ИНТО Курсеви ВРЕДНОСТИ
( 'ЦСЕ-401','Објектно оријентисано програмирање',3),
( 'ЦСЕ-403','Структура података',2),
( 'ЦСЕ-407',„Уник програмирање“,2);

УМЕСТИ У ВРЕДНОСТИ резултата
( '1937463','ЦСЕ-401','Интерни испит',петнаест),
( '1937463','ЦСЕ-401','Средњорочни испит',двадесет),
( '1937463','ЦСЕ-401','Завршни испит',35),
( '1937464','ЦСЕ-403','Интерни испит',17),
( '1937464','ЦСЕ-403','Средњорочни испит',петнаест),
( '1937464','ЦСЕ-403','Завршни испит',30),
( '1937465','ЦСЕ-401','Интерни испит',18),
( '1937465','ЦСЕ-401','Средњорочни испит',2. 3),
( '1937465','ЦСЕ-401','Завршни испит',38),
( '1937466','ЦСЕ-407','Интерни испит',двадесет),
( '1937466','ЦСЕ-407','Средњорочни испит',22),
( '1937466','ЦСЕ-407','Завршни испит',40);

Овде, резултат табела садржи више истих вредности за стд_ид , марк_типе и цоурсе_ид колоне у сваком реду. Како претворити ове редове у колоне ове табеле за приказ података у уређенијем формату, приказано је у следећем делу овог водича.



Ротирајте редове у колоне помоћу наредбе ЦАСЕ:

Покрените следећу једноставну наредбу СЕЛЕЦТ да бисте приказали све записе датотеке резултат сто.





СЕЛЕЦТ*ИЗ резултата;

Резултат показује четири оцене студената за три врсте испита из три предмета. Дакле вредности стд_ид , цоурсе_ид и марк_типе се понављају више пута за различите студенте, курсеве и врсте испита.



Излаз ће бити читљивији ако се упит СЕЛЕЦТ може ефикасније написати употребом наредбе ЦАСЕ. Следећи СЕЛЕЦТ са наредбом ЦАСЕ ће трансформисати понављајуће вредности редова у називе колона и приказати садржај табела у разумљивијем формату за корисника.

СЕЛЕЦТ ресулт.стд_ид, ресулт.цоурсе_ид,
МАКС(СЛУЧАЈ КАДА резултат.марк_типе ='Интерни испит'ОНДА резултат.ознаке КРАЈ) 'Интерни испит',
МАКС(СЛУЧАЈ КАДА резултат.марк_типе ='Средњорочни испит'ОНДА резултат.ознаке КРАЈ) 'Средњорочни испит',
МАКС(СЛУЧАЈ КАДА резултат.марк_типе ='Завршни испит'ОНДА резултат.ознаке КРАЈ) 'Завршни испит'
ИЗ резултата
ГРОУП БИ ресулт.стд_ид, ресулт.цоурсе_ид
ОРДЕР БИ ресулт.стд_ид, ресулт.цоурсе_ид АСЦ;

Следећи излаз ће се појавити након покретања горње наредбе која је читљивија од претходног.

Ротирајте редове у колоне помоћу ЦАСЕ и СУМ ():

Ако желите да пребројите укупан број сваког курса сваког студента из табеле, онда морате да користите збирну функцију СУМ () група од стд_ид и цоурсе_ид са изјавом ЦАСЕ. Следећи упит је креиран изменом претходног упита са функцијом СУМ () и клаузулом ГРОУП БИ.

СЕЛЕЦТ ресулт.стд_ид, ресулт.цоурсе_ид,
МАКС(СЛУЧАЈ КАДА резултат.марк_типе ='Интерни испит'ОНДА резултат.ознаке КРАЈ) 'Интерни испит',
МАКС(СЛУЧАЈ КАДА резултат.марк_типе ='Средњорочни испит'ОНДА резултат.ознаке КРАЈ) 'Средњорочни испит',
МАКС(СЛУЧАЈ КАДА резултат.марк_типе ='Завршни испит'ОНДА резултат.ознаке КРАЈ) 'Завршни испит',
СУМ(резултат.ознаке) каоУкупно
ИЗ резултата
ГРОУП БИ ресулт.стд_ид, ресулт.цоурсе_ид
ОРДЕР БИ ресулт.стд_ид, ресулт.цоурсе_ид АСЦ;

Излаз приказује нову колону под називом Укупно који приказује збир оцена свих врста испита сваког предмета које је добио сваки појединачни студент.

Ротирајте редове у колоне у више табела:

Претходна два упита примењују се на резултат сто. Ова табела се односи на друге две табеле. Су студенти и курсеви . Ако желите да прикажете име студента уместо идентификатора студента и назив курса уместо ИД курса, морате написати упит СЕЛЕЦТ користећи три повезане табеле, студенти , курсеви и резултат . Следећи СЕЛЕЦТ упит је креиран додавањем три имена табела иза клаузуле ФОРМ и постављањем одговарајућих услова у клаузули ВХЕРЕ за преузимање података из три табеле и генерисање прикладнијег резултата од претходних СЕЛЕЦТ упита.

СЕЛЕЦТ студентс.намекао ``Име студента``, цоурсес.намекао ``Назив курса``,
МАКС(СЛУЧАЈ КАДА резултат.марк_типе ='Интерни испит'ОНДА резултат.ознаке КРАЈ) 'ЦТ',
МАКС(СЛУЧАЈ КАДА резултат.марк_типе ='Средњорочни испит'ОНДА резултат.ознаке КРАЈ) 'Средина',
МАКС(СЛУЧАЈ КАДА резултат.марк_типе ='Завршни испит'ОНДА резултат.ознаке КРАЈ) 'Коначни',
СУМ(резултат.ознаке) каоУкупно
ОД ученика, курсеви, резултат
ГДЕ ресулт.стд_ид = студентс.ид и ресулт.цоурсе_ид = цоурсес.цоурсе_ид
ГРОУП БИ ресулт.стд_ид, ресулт.цоурсе_ид
ОРДЕР БИ ресулт.стд_ид, ресулт.цоурсе_ид АСЦ;

Следећи излаз ће се генерисати након извршавања горњег упита.

Закључак:

Како можете имплементирати функционалност функције Пивот () без подршке функције Пивот () у МиСКЛ -у приказано је у овом чланку помоћу неких лажних података. Надам се да ће читаоци моћи да трансформишу било које податке на нивоу реда у податке на нивоу колоне помоћу упита СЕЛЕЦТ након читања овог чланка.