Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem SQL dotaz

MAm tabulku kde su osobne udaje, napr. cislo , meno atd atd. Nasledne je v druhej tabulke cislo (z prvej tabulky - kluc), a typ auta a spz. Niekto ma jdno, niekto 3 nizkto ziadne . . . ako zadat dotaz, aby mi k vypisu do riadku zadal polozky z prvej tabulky (to nieje problem) ale pridat k tomu do toho isteho riadku aj polozky z tabulky aut - teda ten co ma 3 auta bude mat napr plus 2x3 stlpce - typ a spz. Kazda osoba z [rvej tabulky musi mat iba jeden riadok. Ak by som to mohol mat v tolko riadkoch kolko ma kazdy aut, to sa mi podarilo, ale do jedneho riadku . . . . da sa to vobec? a musi to by iba select, nie nejaka procedura . . .

Předmět Autor Datum
Takto se to nedělá. SQL dotaz vrací seznam aut pro toho člověka, tedy 3 řádky, nezvyšuje se počet sl…
Jan Fiala 07.03.2020 20:37
Jan Fiala
MS SQL, možno sa to tak nerobí, ja som si to nevymyslel, do viac riadkov nieje problém, nejaké zákla…
Llubik 08.03.2020 19:08
Llubik
Ty jsi tiskový mluvčí truhlika nebo co? nový
host 08.03.2020 19:16
host
Ano, ta finta se jmenuje třeba dynamicky SQL dotaz. Prostě si dotaz poskládáš do příkazu v proměnné… nový
Jan Fiala 08.03.2020 20:48
Jan Fiala
Máš v té tabulce SPZ nějak označeno, která je 1., 2., 3.? Co když tam budou 4 SPZ, 5,... ? nový
pita1 10.03.2020 17:14
pita1
Nie, pocet nieje, to je samostatna tabulka, jedine select na pocet riadkov pre kazdeho zamestnanca nový
truhlik 11.03.2020 16:14
truhlik
Kdyby v tabulce auto bylo pořadí = 1,2,3 šlo by napsat select majitel.jmeno,prvni.typ,prvni.spz,dru… poslední
pita1 11.03.2020 17:00
pita1
a nějaký left/right join by nešel? SELECT name, age from People right join Cars on People.ID_Car =… nový
asdsada 11.03.2020 16:06
asdsada

Takto se to nedělá.
SQL dotaz vrací seznam aut pro toho člověka, tedy 3 řádky, nezvyšuje se počet sloupců - auta se nevypisují vedle sebe.
To sice je možné udělat přes pivot tabulky, ale pak už záleží na konkrétním SQL serveru, co podporuje.

Ano, ta finta se jmenuje třeba dynamicky SQL dotaz. Prostě si dotaz poskládáš do příkazu v proměnné a ten pak spustíš.
Takže nejprve si SQL dotazem zjistíš, max. počet sloupců budeš potřebovat, pak provedeš SQL dotaz, který ti to vybere pod sebe a ty to pak následným skriptem naplníš do tabulky a vrátíš.

MS SQL umí pivot tables, takže si spusť help a nastuduj syntaxi.

Kdyby v tabulce auto bylo pořadí = 1,2,3
šlo by napsat

select majitel.jmeno,prvni.typ,prvni.spz,druhe.typ,druhe.spz,treti.typ,treti.spz
from majitel
left join auto as prvni
on majitel.id=prvni.id and prvni.poradi=1
left join auto as druhe
on majitel.id=druhe.id and druhe.poradi=2
left join auto as treti
on majitel.id=treti.id and treti.poradi=3

Zpět do poradny Odpovědět na původní otázku Nahoru