Warning: Declaration of Suffusion_MM_Walker::start_el(&$output, $item, $depth, $args) should be compatible with Walker_Nav_Menu::start_el(&$output, $item, $depth = 0, $args = Array, $id = 0) in /DISK2/WWW/plsql.cz/www/wp-content/themes/suffusion/library/suffusion-walkers.php on line 39
Dec 012012
 

Minulé tipy byly o SQL Developeru, takže nyní přímo něco pro Oracle. Ostatně to asi byly poslední tipy pro SQL Developer neb již ho v práci nepouživám a druhak mi zabanovali na Facebooku ve skupině SQL Developer, když jsem pod link patche na SQL Developer napsal, že nejlepší patch na SQL Developer je Toad.. ;)

Dnešní rychlotip si zajisté spousta lidí oblíbí, je to častý dotaz na forech a existuje spousta workaroundů a spousta různých implementací – od Oracle 10g je však k dispozici klauzule v selectu, která to zvládá sama o sobě. Tedy go, hébičky, go!

Nejprve založíme nějakou testovací tabulku – CTAS z dualu, klasika:

create table sloupce_do_radku as select rownum ID, 'Monter Energy' as Monster, 'Red Bull' as Red,'RockStar' as Rock,'Shock Bitter' as Shock,'Suicide Silence' as Suicide,
'Beneath The Sky' as Beneath from dual;

Transformace sloupcu do řádků

Transformace sloupcu do řádků

A nyní jak na transformaci – je na to klauzule UNPIVOT (a alternativně PIVOT jako inverzní operace)

select id,sloupce_v_radcich,odkud_transformovano from sloupce_do_radku unpivot
(sloupce_v_radcich for odkud_transformovano in
(Monster,Red,Shock,Suicide,Beneath,Rock));

UNPIVOT klauzule obsahuje název sloupce ve kterém budou uloženy názvy sloupců ze kterých se hodnoty transformovaly – odkud_transformovano (- není nutné ho vytahovat v selectu ven, ale je to povinná součást UNPIVOT klauzule) a název sloupce ve kterém jsou ztransformované hodnoty – sloupce_v_radcich (- není nuté ho vytahovat v selectu ven, ačkoliv je to typicky žádoucí). A nyní výsledek výše uvedeného selectu:

Transformace sloupců do řádků a klauzule UNPIVOT

Transformace sloupců do řádků a klauzule UNPIVOT

V poslední části UNPIVOT je v IN seznam sloupců, které se mají ztransformovat. A nějaké poznámky k tomu:

  • Co je v in listu v UNPIVOTU nelze vytáhnout v selectu do projection (logicky by to nedávalo smysl)
  • Pokud jsou v hodnotách NULL je na výběr INCLUDE nebo EXCLUDE NULLS (výchozí)
  • V exeukučním plánu je to označeno přímo jako UNPIVOT, náklady čekejme  počet_transformovanejch_sloupcu*acces_path_cost_bez_unpivota.


A neodpustim si jednu větu z osobního života: zlatý řez je pověra, nelze to implementovat – lidské samičky prostě nemají hlavu ve formátu 1:1,618..

 Posted by at 21:11

  One Response to “Rychlotip #15 – transformace sloupců do řádků”

  1. [...] další době nějaký ten rychlotip, protože poslední rychlotip číslo #15 byl transformace sloupců do řádků je logické následovat opačnou tranformací – tedy transformace ze řádků do [...]

 Leave a Reply

(required)

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>