[ inherited @ 20.04.2007. 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
[ savkic @ 20.04.2007. 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?

[ DarkMan @ 20.04.2007. 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.
[ inherited @ 20.04.2007. 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.
[ chachka @ 20.04.2007. 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.
[ inherited @ 21.04.2007. 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?