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

Pokusaj spajanja upita operatorom union.

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

[ Pregleda: 1210 | Odgovora: 5 ]

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

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
20.04.2007. u 14:30 

savkic
Igor Savkić

Član broj: 92186
Poruke: 1467
*.static.sbb.co.yu.



Profil

icon Re: Pokusaj spajanja upita operatorom union.20.04.2007. u 16:06
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?


20.04.2007. u 16:06 

DarkMan
Darko Matesic

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



Profil

icon Re: Pokusaj spajanja upita operatorom union.20.04.2007. u 18:24
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.
20.04.2007. u 18:24 

inherited
Novi Sad

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



Profil

icon Re: Pokusaj spajanja upita operatorom union.20.04.2007. u 18:38
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.
20.04.2007. u 18:38 

chachka
Srđan Mijatov
Subotica

Moderator
Član broj: 53780
Poruke: 534
*.ADSL.neobee.net.

Sajt: www.baze-podataka.net


Profil

icon Re: Pokusaj spajanja upita operatorom union.20.04.2007. u 19:24
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
"biggest obstacle to learning SQL is unlearning procedural programming" - Joe Celko
20.04.2007. u 19:24 

inherited
Novi Sad

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



Profil

icon Re: Pokusaj spajanja upita operatorom union.21.04.2007. u 00:40
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?
21.04.2007. u 00:40 

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

[ Pregleda: 1210 | Odgovora: 5 ]

Postavi temu Odgovori

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