Šta je novo?

MYSQL pomoc

danijel00

Čuven
Učlanjen(a)
08.11.2003
Poruke
7,023
Poena
875
Imam jedan problem iz sql-a koji ne znam da resim, tu sam svasta smisljao, ali bi mi definitivno odgovaralo da nadjem cisto sql resenje....

probacu da dam sto detaljniji opis problema, ako nista drugu, bar da ne dobijam bezvezne odgovore |>

dakle imam tabelu tbluplate

sa poljima
idkandidata
uplataDatum
uplataIznos
uplataTip

tip uplate moze biti razno, rata1, rata2, ... rata10
za svaki idkandidata ima onoliko unosa koliko ima uplata
stim da mogu da plate sve kao jednu ratu, a mogu da imaju do 10 rata

problem je sto izvestaj treba da izgleda ovako:

id iznosRata1 datum1 iznosRata2 datum2 iznosRata3 datum3 ...

svaka rata u svoju kolonu, po jedan red za za svaki id...
e sad koliko ja znam sql ne moze da vraca promenljiv broj kolona, pa ovo otpada...
onda sam smislio da dam ovako nesto (posto glavnina ima 2 rate, a redje preko3)

id iznosRata1 datum1 iznosRata2 datum2 iznosOstaleRate

zbudzio sam ja tu neki kod, aliii on samo prikaze one koji su platili u 3 rate
ako je neko platio npr samo 1 ratu, ili 2 tog ne prikaze, a zeleo bih da mi prikaze 0 npr za ovaj iznos ostalih rata..
ako neko ima ideju sta da koristim neka vice...

gledao sam nesto preko join-a, ali mi nesto nije bas najjasnije kako radi |[

mozda bih moga preko union nesto da probam, tj da odradim upit onih koji su platili 1 ratu, 2 rate, i vise rata, ali onda ne znam kako da ih sortiram |[
 
Daj konkretan sql ako hoces pomoc.
Ja ovakve probleme resavam koristeci pomocne tabele koje prvo napunim potrebnim podacima (u petlji) a onda jednim select-om izvuces iz te tabele format kakav mi treba.
 
Generalno, u SQL-u ne možeš, kao što si rekao, da napraviš promenljiv broj kolona, a i nemoguće je (probaj malo logički da svariš, pa ćeš videti...). Jedna varijanta je da napraviš onoliko kolona koliko imaš različitih tipova (10, koliko sam shvatio) i onda da je puniš. Druga varijanta je da imaš izveštaj grupisan po polju IdKandidata, gde za svakog kandidata praviš izveštaj koji izgleda otprilike ovako:

----------
Kandidat1
----------
Rata1
Rata2
Rata3
----------

---------
Kandidat2
---------
Rata1
Rata2
Rata3
Rata4
---------

... i tako dalje, dakle promenljivi broj redova za svakog kandidata. To su jedina dva rešenja, ti izaberi koji ti odgovara. Mislim da je najbolje da odradiš na način dat u drugom predlogu, a ti vidi. Pozdrav!


P.S. Naziv threada treba da je "SQL pitanje" a ne "MySQL pitanje", nebitno.
 
Baš tako, ne mogu se redovi pretvoriti u kolone ali SQL server 2005 ce moci i to uy pomoc pivot opcije. => ili menja bazu ili kodiraj
 
Malo sam razlmislio :bottle: i u sustini mozes problem da resis na sledeci nacin:

select x1.idkandidata, x1.uplataiznos, x1.uplatadatum,
(
select x2.uplataiznos
from tbluplate x2
where x2.idkandidata = x1.idkandidata
and x2.uplatatip = 'rata2'
) as iznosRata2 ,
(
select x2.uplatadatum
from tbluplate x2
where x2.idkandidata = x1.idkandidata
and x2.uplatatip = 'rata2'
) as datumRata2 ,
... za ostale rate
from tbluplate x1
where x1.idkandidata = [neki id]
and x1.uplatatip = 'rata1'

Naravno, svo ovo moze pod uslovom da MySQL dozvoljava ugnjezden upit (sto Oracle i Informix sigurno mogu)
 
Potvrdili ste mi manje vise sumnje...
ne mogu na mssql2005 da prelazim, sumnjam da bi ovi da ga plate, a ne verujem da ce msde imati tu opciju...
a jeste mysql problem, jer je baza mysql, doduse sad podrzava sve osim procedura (pricam o verziji 4.1.6)
probacu jos neku varijantu sa left join, koja ce mozda uraditi posao, ili union, ili cu prosto da uradim za svakog kandidata vise redova, pa kraj |]
hvala svima na brzoj pomoci..
 
totalno je offtopic:
Nadj, imas li tutorial za Lingo/Lindo u elektronskom obliku?
(koristio bih pm, ali ne znam da li ti je ukljucen e-mail notification i za pm, a odgovor bi mi trebao asap)
 
To se radi serijom upita :
1. Saznas koliki ti je max broj kolona po osobi
2. Radis create tabele koju ces da prikazes (po mogucstvu temp tabele) sa kolonama koje prikazujes (id, iznosrate1, datum1, .....)
3. Ubacis ID-jeve radnika sa nekim distinct selectom
4. Radis update kolona za rate i datume po id-ju radnika koristeci neki case uslov npr:
update TmpTabela set
CASE Rata
when 1 then iznosrate1 = iznos
....
where TmpTabela.id = id
5. Pljusnes select iz te tabele na report
 
Resio sam ja ovo na svoj malo kao elegantniji nacin od pravljenja nove tabele... left joinujem istu tabelu 10 puta...
odnosno napravio sam oooogroman sql upit od 10-tak kb |>
rata moze biti max 10, tako da pravim 10 kolona za svakog makar praznih... problem sto to ispod a0 nece stati na papir |)) morace oni malo svoje zelje da prilagode stampi |)
ps moze mi i to tvoje resenje sa case nekad zatreba, nije uopste palo napamet da i to moze |) hvala...
 
danijel00 je napisao(la):
Resio sam ja ovo na svoj malo kao elegantniji nacin od pravljenja nove tabele... left joinujem istu tabelu 10 puta...
odnosno napravio sam oooogroman sql upit od 10-tak kb |>
rata moze biti max 10, tako da pravim 10 kolona za svakog makar praznih... problem sto to ispod a0 nece stati na papir |)) morace oni malo svoje zelje da prilagode stampi |)
ps moze mi i to tvoje resenje sa case nekad zatreba, nije uopste palo napamet da i to moze |) hvala...

A sta sam ti ja napisao :trust:
 
Nazad
Vrh Dno