Predpoklad:
Musíte vytvoriť databázu a niektoré súvisiace tabuľky, kde budú riadky jednej tabuľky prevedené do stĺpcov ako funkcia PIVOT (). Spustením nasledujúcich príkazov SQL vytvorte databázu s názvom „ unidb “A vytvorte tri tabuľky s názvom„ študenti “,„ kurzy “A„ výsledok '. študenti a výsledok tabuľky budú prepojené vzťahom jedna k mnohým a kurzy a výsledky Tu budú tabuľky prepojené vzťahom jedna k mnohým. VYTVORIŤ vyhlásenie spoločnosti výsledok tabuľka obsahuje dve obmedzenia cudzích kľúčov pre polia, std_id a course_id .
VYTVORIŤ DATABÁZU unidb;
POUŽIŤ unidb;
VYTVORIŤ TABUĽKU študenti(
idVNÚTORNÝ PRIMÁRNY KĽÚČ,
meno varchar(päťdesiat)NIE NULL,
oddelenie VARCHAR(pätnásť)NIE NULL);
VYTVORTE kurzy TABUĽKY(
course_id VARCHAR(dvadsať)PRIMÁRNY KĽÚČ,
meno varchar(päťdesiat)NIE NULL,
kredit SMALLINT NIE JE NULOVÝ);
CREATE TABLE výsledok(
std_id INT NOT NULL,
course_id VARCHAR(dvadsať)NIE NULL,
typ_značky VARCHAR(dvadsať)NIE NULL,
označí SMALLINT NIE NULL,
CUDZÍ KĽÚČ(std_id)LITERATÚRA študenti(id),
CUDZÍ KĽÚČ(course_id)REFERENČNÉ kurzy(course_id),
PRIMÁRNY KĽÚČ(std_id, course_id, mark_type));
Vložte nejaké záznamy do študenti, kurzy a výsledok stoly. Hodnoty je potrebné vložiť do tabuliek na základe obmedzení stanovených v čase vytvárania tabuľky.
VLOŽTE DO HODNOTY študentov
( „1937463“,„Harper Lee“,„VVN“),
( „1937464“,Garcia Marquez,„VVN“),
( „1937465“,„Forster, E.M.“,„VVN“),
( „1937466“,„Ralph Ellison“,„VVN“);
VLOŽTE DO HODNOTY kurzov
( „CSE-401“,'Objektovo orientované programovanie',3),
( „CSE-403“,'Dátová štruktúra',2),
( „CSE-407“,„Unixové programovanie“,2);
VLOŽTE DO HODNOTY výsledku
( „1937463“,„CSE-401“,„Interná skúška“,pätnásť),
( „1937463“,„CSE-401“,„Strednodobá skúška“,dvadsať),
( „1937463“,„CSE-401“,'Záverečná skúška',35),
( „1937464“,„CSE-403“,„Interná skúška“,17),
( „1937464“,„CSE-403“,„Strednodobá skúška“,pätnásť),
( „1937464“,„CSE-403“,'Záverečná skúška',30),
( „1937465“,„CSE-401“,„Interná skúška“,18),
( „1937465“,„CSE-401“,„Strednodobá skúška“,2. 3),
( „1937465“,„CSE-401“,'Záverečná skúška',38),
( „1937466“,„CSE-407“,„Interná skúška“,dvadsať),
( „1937466“,„CSE-407“,„Strednodobá skúška“,22),
( „1937466“,„CSE-407“,'Záverečná skúška',40);
Tu, výsledok tabuľka obsahuje viacero rovnakých hodnôt pre std_id , typ_značky a course_id stĺpce v každom riadku. Ako previesť tieto riadky do stĺpcov tejto tabuľky na zobrazenie údajov v organizovanejšom formáte je uvedené v ďalšej časti tohto tutoriálu.
Otočte riadky do stĺpcov pomocou príkazu CASE:
Spustením nasledujúceho jednoduchého príkazu SELECT zobrazíte všetky záznamy súboru výsledok stôl.
VYBERTE*FROM výsledok;
Výstup zobrazuje štyri známky študentov pre tri typy skúšok z troch kurzov. Takže hodnoty std_id , course_id a typ_značky sa opakujú viackrát pre rôznych študentov, kurzy a typy skúšok.
Výstup bude čitateľnejší, ak bude dotaz SELECT možné napísať efektívnejšie pomocou príkazu CASE. Nasledujúci príkaz SELECT s príkazom CASE transformuje opakujúce sa hodnoty riadkov na názvy stĺpcov a zobrazí obsah tabuliek v zrozumiteľnejšom formáte pre používateľa.
VYBRAŤ result.std_id, result.course_id,MAX(PRÍPAD, KEDY result.mark_type =„Interná skúška“POTOM výsledok.značky KONIEC) „Interná skúška“,
MAX(PRÍPAD, KEDY result.mark_type =„Strednodobá skúška“POTOM výsledok.značky KONIEC) „Strednodobá skúška“,
MAX(PRÍPAD, KEDY result.mark_type ='Záverečná skúška'POTOM výsledok.značky KONIEC) 'Záverečná skúška'
FROM výsledok
SKUPINA PODĽA result.std_id, result.course_id
OBJEDNAŤ BY result.std_id, result.course_id ASC;
Nasledujúci výstup sa objaví po spustení vyššie uvedeného príkazu, ktorý je čitateľnejší ako predchádzajúci výstup.
Otočte riadky do stĺpcov pomocou CASE a SUM ():
Ak chcete z tabuľky spočítať celkový počet každého kurzu každého študenta, musíte použiť súhrnnú funkciu SUM () zoskupiť podľa std_id a course_id s vyhlásením CASE. Nasledujúci dotaz je vytvorený úpravou predchádzajúceho dotazu pomocou funkcie SUM () a klauzuly GROUP BY.
VYBRAŤ result.std_id, result.course_id,MAX(PRÍPAD, KEDY result.mark_type =„Interná skúška“POTOM výsledok.značky KONIEC) „Interná skúška“,
MAX(PRÍPAD, KEDY result.mark_type =„Strednodobá skúška“POTOM výsledok.značky KONIEC) „Strednodobá skúška“,
MAX(PRÍPAD, KEDY result.mark_type ='Záverečná skúška'POTOM výsledok.značky KONIEC) 'Záverečná skúška',
SÚČET(výsledok.značky) akoCelkom
FROM výsledok
SKUPINA PODĽA result.std_id, result.course_id
OBJEDNAŤ BY result.std_id, result.course_id ASC;
Výstupom je nový stĺpec s názvom Celkom ktorý zobrazuje súčet známok všetkých typov skúšok každého kurzu, ktoré získal každý konkrétny študent.
Otočiť riadky do stĺpcov vo viacerých tabuľkách:
Predchádzajúce dva dotazy sa použijú na súbor výsledok stôl. Táto tabuľka súvisí s ďalšími dvoma tabuľkami. Toto sú študenti a kurzy . Ak chcete namiesto ID študenta zobraziť meno študenta a namiesto názvu kurzu názov kurzu, musíte napísať dotaz SELECT pomocou troch súvisiacich tabuliek, študenti , kurzy a výsledok . Nasledujúci dotaz SELECT sa vytvorí pridaním troch názvov tabuliek za klauzulu FORM a nastavením vhodných podmienok v klauzule WHERE na získanie údajov z troch tabuliek a vygenerovanie vhodnejšieho výstupu ako predchádzajúce dotazy SELECT.
VYBRAŤ študentov.názovako “Meno študenta“, kurzy.názovako “Názov kurzu“,MAX(PRÍPAD, KEDY result.mark_type =„Interná skúška“POTOM výsledok.značky KONIEC) „CT“,
MAX(PRÍPAD, KEDY result.mark_type =„Strednodobá skúška“POTOM výsledok.značky KONIEC) 'Mid',
MAX(PRÍPAD, KEDY result.mark_type ='Záverečná skúška'POTOM výsledok.značky KONIEC) 'Finálny',
SÚČET(výsledok.značky) akoCelkom
OD študentov, kurzy, výsledok
WHERE result.std_id = students.id a result.course_id = courses.course_id
SKUPINA PODĽA result.std_id, result.course_id
OBJEDNAŤ BY result.std_id, result.course_id ASC;
Nasledujúci výstup sa vygeneruje po vykonaní vyššie uvedeného dotazu.
Záver:
Ako môžete implementovať funkčnosť funkcie Pivot () bez podpory funkcie Pivot () v MySQL, je uvedené v tomto článku pomocou niektorých fiktívnych údajov. Dúfam, že po prečítaní tohto článku budú čitatelia schopní transformovať údaje na úrovni riadkov na údaje na úrovni stĺpcov pomocou dotazu SELECT.