PIVOT JA UNPIVOT

Pivot tekitab tavalisest tabelist kahemõõtmelise risttabeli. Unpivot teeb täpselt vastupidist.

Püüame tekitada risttabeli, milles oleks ridades laste sünnilinn ning veergudes sünniaastad ning andmetena laste keskmised pikkused:

[crayon-6851486341cbe415541031/]

Vastupidise teisenduse saame korraldada UNPIVOT käsuga. Selleks salvestan eelnevalt eelmise pärinu tulemuse ajutisse tabelisse kasutades SELECT … INTO #ristt … konstruktsiooni, ehk siis

[crayon-6851486341cc2910375471/]

Iseenesest õnnestus ka varem moodustada analoogseid konstruktsioone, kasutades CASE valikuid SELECT loetelus. PIVOT on muutnud selle protsessi oluliselt lihtsamaks kuid risttabelisse minevad väljanimed (veerud) tuleb endiselt sisse trükkida ning neid pole võimalik tekitada dünaamiliselt.

Lahenduseks on sellele dünaamiline SQLi koostamine ning käivitamine EXEC abil.

Selleks tuleb luua skript, mis tekitab komadega eraldatud loetelu kõigist risttabelisse minevatest väljadest ning kleepida see SQLis õige koha peale.

Kuna kasutame SQL 2005 siis teeksin selle tegevuse kasutades CTE abi:

[crayon-6851486341cc5945000930/]