[ favory @ 16.06.2009. 17:50 ] @
Imam tabelu:

col1 col2 col3
.1.....0......2
.3.....4......5
.0.....0......6

rezultat treba da bude tabela:

col1
1
2
3
4
5
6

Pozdrav...

[ #Ninja# @ 16.06.2009. 18:25 ] @
Funkcija koja ti treba je UNPIVOT.
[ jablan @ 16.06.2009. 18:50 ] @
Code:
select col1 from tabela
union all
select col2 from tabela
union all
select col3 from tabela


I, naravno, redizajn loše isprojektovane baze.
[ favory @ 16.06.2009. 19:21 ] @
Prihvatam svaki dobar predlog, pa i ako je upitanju redijzajniranje baze. Evo konkretnog "problema". Tabela sa tri kolone je tabela u kome su smesteni zapisi koji cine stavku fakture. Te kolone su: iznos fakture, osnovica za pdv i iznos pdv-a. Cini mi se da je logicno da budu tri kolone u jednom zapisu tabele. Iz te tabele se vrsi formiranje naloga za knjizenje sa sve kontiranjem:-). A nalog za knjizenje jedne stavke fakture se deli na tri zapisa i to jedan za iznos fakture, jedan za osnovicu i jedan za pdv (jer pravilo knjizenja jednostavno tako zahteva)!

Mozda nisam bio bas najjasniji u prvoj poruci! Radi se o upitu nad vise tabela. Dve u odnosu jedan prema vise (gde su u jednoj osnovni podaci fakture a u drugoj stavke iste). U trecoj se nalaze definisana konta za svaku stavku fakture i to posebno za iznos fakture, osnovicu i pdv. Upit ce biti popriilicno komplikovan, ali ne vidim bolje resenje!?



[Ovu poruku je menjao favory dana 16.06.2009. u 20:48 GMT+1]
[ jablan @ 16.06.2009. 20:48 ] @
Citat:
favory: Te kolone su: iznos fakture, osnovica za pdv i iznos pdv-a. Cini mi se da je logicno da budu tri kolone u jednom zapisu tabele.

Dovde te kapiram i slažem se sa tobom. Logično je tako kao što kažeš.

E sad, pošto nisam upućen u knjigovodstvenu tematiku, ne kapiram ovo drugo, za odvajanje ta tri polja u tri odvojena reda. Je l' to mora u bazi da bude tako zapisano ili samo u prezentaciji? Ako je ovo drugo u pitanju, logično mi je da se to reši u aplikaciji...

Takođe, sad prvi put pominješ tri tabele (u prvoj poruci pominje se samo jedna). Pretpostavljam da je sa tri tabele ista priča, samo što ćeš imati left join-ove.
[ favory @ 17.06.2009. 05:26 ] @
Nacin zapisivanja u drugoj bazi mora biti takav. Znaci tri reda! Svaki od ta tri iznosa ide na drugi konto, pa samim tim i u sledeci red. Ako bi se drzao nacina zapisivanja kao u prvoj tabeli, to bi bilo kao kada bi drzao sifre i nazive automobila u prodavnici automobila po tri u jednom redu u tri kolone! Tek tada bih imao problem kod formiranja izvestaja!

A evo i konkretnog primera:

Tabela1
Partner_Id........ NazPar
..33..............naziv partnera

Tabela2
Stav_Id............OpisStav..........konto1...konto2...konto3
..22..............stavka fakture 1.....444......777........888
..55..............stavka fakture 2.....666......222........999

Tabela1 i Tabela2 su sifarnici partnera i stavki faktura

Tabela3
Faktura_Id.......Partner_Id
....11..................33

Tabela4
Faktura_Id......Stav_Id.....iznos1....iznos2.....iznos3
...11.................22......... 1111......2222......3333
...11.................55......... 4444......5555......6666

Tabela3 i Tabela4 podaci fakture (tabele u odnosu jedan prema vise)

Rezultujuca tabela treba da izgleda:

konto......faktura_Id.......opis...............iznos
.444............11........naziv partnera......1111
.777............11........naziv partnera......2222
.888............11........naziv partnera......3333
.666............11........naziv partnera......4444
.222............11........naziv partnera......5555
.999............11........naziv partnera......6666

Inace sve ovo je nacin na koji funkcionise stara aplikacija, ali ne sa SQL-om. Problem je sto sam jos relativno tanak sa SQL-om. Ako neko imam volje da se udubi i predlozi mi resenje, bicu mu iskreno zahvalan!

Pozdrav...



[Ovu poruku je menjao favory dana 17.06.2009. u 09:04 GMT+1]

[Ovu poruku je menjao favory dana 17.06.2009. u 09:06 GMT+1]
[ .:Marvin:. @ 17.06.2009. 07:50 ] @
Jablan ti je dao dobar predlog, sa unijom.
Znaci u prvom delu knjizis iznose, u drugom osnovicu i trecem PDV.
Jesi li probao ovu logiku?
[ jablan @ 17.06.2009. 12:48 ] @
I ja mislim da bi mu unija završila posao, plus par joinova na šifarnike...

Btw, @favory, http://www.elitesecurity.org/t106046-Baze-podataka-Pravila-foruma (3. stavka)
[ favory @ 17.06.2009. 13:27 ] @
Da, Jablan je bio u pravu! Unija je resila stvar! Cak upit na kraju nije ni preterano komplikovan.
Pozdrav svima...
[ Zidar @ 17.06.2009. 14:17 ] @
U istom postu gde je Jablan pomenuo UNION, pise i ovo "I, naravno, redizajn loše isprojektovane baze."

Cim imas potrebu da radis UNPIVOT, jedan od nacina je i UNION, to znaci da ti tabele nisu normalizovane kako treba. Ako bi normalizovao onu tabelu koja ima kolone (Konto1, Konto2, konto3) rezultat bi dobio mnogo lakse, verovatno direktno iz tabele ili bi ti trebao samo jedan jednostavni JOIN. Mnogoje lakse prikazati normalizovane podatke u obliku

Code:

Tabela2 
Stav_Id............OpisStav..........konto1...konto2...konto3 
..22..............stavka fakture 1.....444......777........888
..55..............stavka fakture 2.....666......222........999



nego poci od tog oblika pa dobiti:
Code:

Rezultujuca tabela treba da izgleda:

konto......faktura_Id.......opis...............iznos
.444............11........naziv partnera......1111
.777............11........naziv partnera......2222
.888............11........naziv partnera......3333
.666............11........naziv partnera......4444
.222............11........naziv partnera......5555
.999............11........naziv partnera......6666