Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pokusaj spajanja upita operatorom union.

[es] :: Baze podataka :: Pokusaj spajanja upita operatorom union.

[ Pregleda: 3628 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

inherited
Novi Sad

Član broj: 95516
Poruke: 219
*.exe042.net.



Profil

icon Pokusaj spajanja upita operatorom union.20.04.2007. u 14:30 - pre 206 meseci
Ne znam da li cu uspeti ispravno predstaviti problem, al probacu.
Imam dve tabele. Jedna je lica a druga trgovina.
U lica se belezi id_lica, ime, a u trgovina id_lica,datum,vreme,akcija.
Akcija moze biti "kupio", "prodao".
Imam dva upita:
- prikaz lica po kriterijumu "kupio"
Code:

select l.id_lica,l.ime,t.datum,t.vreme,t.akcija
from lica l
 right join trgovina t on l.id_lica = t.id_lica
where t.akcija = 'kupio'
order by t.datum desc, t.vreme desc

- prikaz lica po kriterijumu "prodao"
Code:

select l.id_lica,l.ime,t.datum,t.vreme,t.akcija
from lica l
 right join trgovina t on l.id_lica = t.id_lica
where t.akcija = 'prodao'
order by t.datum desc, t.vreme desc

U prvom upitu dobijam lice, datum, vreme i "kupio" u opadajucem redosledu,
a u drugom lice, datum, vreme i "prodao" u opadajucem redosledu.

Kako bi ovo mogao pretvoriti u jedan upit tako da rezultat bude:
id_lica, ime, datum, kupio, vreme, prodao vreme od najnovijeg vremena ka najstarijem vremenu.
Grupisano po id_licu. Probao sam sa operatorom UNION, ali nisam bas uspeo.
Citat:

1, Goran, 20.04.2007., kupio, 17:30:28, prodao, 17:40:00
1, Goran, 20.04.2007., kupio, 15:30:28, prodao, 16:00:00
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Pokusaj spajanja upita operatorom union.20.04.2007. u 16:06 - pre 206 meseci
Ako sam te dobro praktično imamo dve upita, glavni po kupovini a drugi po prodaji i onda se redom uzimaju stavke iz prodaje i popunjava ovaj glavni. Deluje mi najlakše da uradiš upravo tako ali na klijentu, dva nezavisna upita i ručno popunjavanje. Bilo bi dobro da kažeš i koju bazu koristiš. I jedno pitanje za dizajn, zašto u toj tabeli prometa ne staviš dva polja, vreme kupovine artikla i vreme njegove prodaje?


 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
*.mediaworksit.net.

Jabber: DarkMan


Profil

icon Re: Pokusaj spajanja upita operatorom union.20.04.2007. u 18:24 - pre 206 meseci
U MSSQL kada radis uniju mozes da imas samo jedan order by klauzulu na kraju upita.
Eliminisi order by iz gornjeg selekta pa probaj uniju.
 
Odgovor na temu

inherited
Novi Sad

Član broj: 95516
Poruke: 219
*.exe042.net.



Profil

icon Re: Pokusaj spajanja upita operatorom union.20.04.2007. u 18:38 - pre 206 meseci
Primer sam dao radi vezbe, ne dizajniram nista, samo isprobavam.
Treba mi da to jednostavno spojim u jednu tabelu, privremenu, gde bih imao pregled.
(id_lica, ime, datum, kupio, vreme, prodao, vreme), od najsvezijeg datuma ka najstarijem.
Citat:

Ovo:
1, Goran, 20.04.2007., kupio, 17:30:28, prazno, prazno
1, Goran, 20.04.2007., prazno, prazno, prodao, 17:40:00
Pretvoriti u ovo:
1, Goran, 20.04.2007., kupio, 17:30:28, prodao, 17:40:00

Koristim Access, trenutno,a izbacio sam order by.
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
*.ADSL.neobee.net.

Sajt: www.baze-podataka.net


+4 Profil

icon Re: Pokusaj spajanja upita operatorom union.20.04.2007. u 19:24 - pre 206 meseci
Nedavno sam u temi "kako da izvucem podatke iz tri tabele koje nemaju jednak broj zapisa" odgovorio na slicno pitanje. Metod koji je tamo primenjen se moze upotrebi i u ovom slucaju. Pokusaj.

Mala pomoc: Podupit iz navedenog resenja zameni sa unijom tvoja dva upita (upit prodaje i upit kupovine bas kako si ih prikazao u poslednjem postu sa sve dodatim NULL-ovima). Nakon toga primeni MAX-CASE kombinaciju za uklanjanje nepozeljnih NULL-ova.
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

inherited
Novi Sad

Član broj: 95516
Poruke: 219
*.exe042.net.



Profil

icon Re: Pokusaj spajanja upita operatorom union.21.04.2007. u 00:40 - pre 206 meseci
Uspeo sam ovo:
Code:

-- K = kupio
select 'K' as tip,t.id_lica,t.datum,t.akcija as kupio,t.vreme,'' as prodao,'' as vreme
from trgovina as t
 inner join trgovina as t1 on t.id_lica = t1.id_lica
where t.akcija = 'kupio'
group by t.id_lica,t.datum,t.akcija as kupio,t.vreme
union all
-- P = prodao
select 'P' as tip,t.id_lica,t.datum,'','',t.akcija as kupio,t.vreme
from trgovina as t
 inner join trgovina as t1 on t.id_lica = t1.id_lica
where t.akcija = 'prodao'
group by t.id_lica,t.datum,t.akcija as kupio,t.vreme

Rezultat, probao sam na MySQL:
Citat:

K,1, Goran, 20.04.2007., kupio, 17:30:28,'', ''
K,2, Milan, 20.04.2007., kupio, 17:35:28,'', ''
P,1, Goran, 20.04.2007., '', '', prodao, 16:00:00
P,2, Milan, 20.04.2007., '', '', prodao, 16:05:00

Pokusavam, ali nikako da dobijem:
Citat:

1, Goran, 20.04.2007., kupio, 17:30:28, prodao, 16:00:00
2, Milan, 20.04.2007., kupio, 17:35:28, prodao, 16:05:00

Nisam bas najbolje razumeo ono sa MAX-CASE?
 
Odgovor na temu

[es] :: Baze podataka :: Pokusaj spajanja upita operatorom union.

[ Pregleda: 3628 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.