Diskuze: Pivot table v MySQL

Ostatní jazyky SQL SQL a databáze Pivot table v MySQL

Avatar
no.good
Člen
Avatar
no.good:

Zdravím, potřeboval bych přetransformovat tabulku1 viz níže na pivot tabulku, která je uvedena pod ní. Je možné toto provést pomocí sql příkazů v MySQL? V podstatě to co je v pivot tabulce v obci je agregované hodnoty z tabulky1.Obec a hodnoty z tabulky1.Jmeno se převedou na název sloupce a hodnoty z Tabulka1.Cena jsou pak hodnotami této pivot_tabulky.
Předem díky za pomoc

Tabulka1:

+------+------+---------+-------+
| PK   | Jmeno| Obec    | Cena  |
+------+------+---------+-------+
|    1 | Bob  |Praha    |    75 |
|    2 | Bob  |Brno     |    77 |
|    3 | Bob  |Ostrava  |    78 |
|    4 | Bob  |Plzeň    |    80 |
|    5 | Sue  |Brno     |    90 |
|    6 | Sue  |Praha    |    97 |
|    7 | Sue  |Liberec  |    98 |
|    8 | Sue  |Písek    |    99 |
+------+------+---------+-------+

Pivot_tabulka:

-------------------------
|Obec    |  Bob  | Sue  |
------------------------
|Praha   |  75   | 97   |
|Brno    |  77   | 90   |
|Ostrava |  78   |      |
|Plzeň  |  80   |      |
|Liberec |       | 98   |
|Písek  |       | 99   |
Editováno 4.9.2013 9:30
 
Odpovědět 4.9.2013 8:26
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na no.good
David Čápka:

Přijde mi dost nešikovné mít jako názvy sloupců jména, neznám tvůj Use Case, ale návrhově to vypadá jako chyba. Tabulky samozřejmě můžeš převést jen pomocí SQL dotazů, dá se totiž udělat něco jako:

INSERT INTO `tabulka` (sloupec1, sloupec 2) VALUES
(SELECT `sloupecX` AS `sloupec1`, `sloupecY` AS `sloupec2` FROM `tabulka2`)
Nahoru Odpovědět 4.9.2013 9:33
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
no.good
Člen
Avatar
no.good:

Ahoj, no jedná se normálně o to co bych normálně udělal v accessu, a myslím tím křížovou tabulku. Možná to z té dolní tabulky není zřejmé, ale má se jednat už o konečný výstup. Co se týká jmen, tak těch může být víc, takže takovéhle řešení mi moc nepomůže. SQL dotaz by měl být podobný tomu níže:

SELECT
Obec,
SUM(CASE Jmeno WHEN 'Bob' THEN Cena ELSE 0 END) AS Bob,
SUM(CASE Jmeno WHEN 'Sue' THEN Cena ELSE 0 END) AS Sue
FROM zkouskapivot
GROUP BY Obec

nicméně pokud bych vždycky přidal nové jméno, které zde ještě nemám uvedený, tak bych musel přidat i nový řádek s podmínkou a ještě k tomu zjišťovat, které jméno přibylo, což bych potřeboval, aby bylo automatické.

 
Nahoru Odpovědět 4.9.2013 16:26
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Možná ti to připadá jako nešikovné, ale představ si, že ti manažer přikáže, abys mu vytiskl tabulku výkonnosti jednotlivých prodejců v jednotlivých městech (nebo třeba letech) a ty máš k dispozici normalizovaná data.

Nahoru Odpovědět 4.9.2013 16:43
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Nahoru Odpovědět  +1 4.9.2013 16:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na no.good
David Čápka:

S novým jménem musíš hlavně přidat nový sloupec, proto se mi ta tabulka nelíbí :) jedním dotazem to určitě jde, ale bude dost hustý a nejsem v SQL tak sběhlý, abych ho z fleku napsal. Určitě to v nejhorším můžeš vybrat buď pro uživatele nebo pro město a jet to v cyklu.

Editováno 4.9.2013 16:59
Nahoru Odpovědět 4.9.2013 16:59
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
no.good
Člen
Avatar
no.good:

Díky za pomoc. To co jsem myslel, tak napsal Kit

 
Nahoru Odpovědět 11.9.2013 9:48
Avatar
jacobjhon374
Člen
Avatar
jacobjhon374:

Možná ti to připadá jako nešikovné, ale představ si, že ti manažer přikáže, abys mu vytiskl tabulku výkonnosti jednotlivých prodejců v jednotlivých městech a ty máš k dispozici normalizovaná data.....!

Nahoru Odpovědět 12.10.2013 15:47
Smile PleaZZzzzZZZzzz.....(Usman Malik)....!!!
Avatar
Kit
Redaktor
Avatar
Nahoru Odpovědět 12.10.2013 16:43
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.