• 9 odgovora
  • 5.597 pregleda
SQL DISTINCT naredba master/details 06.04.2008. u 22:44 · pre 225 meseci #1
Pozdrav !!!

Delphi 7


Radi se o master/details tabela sa SQL naredbama -
Spajanje details tabele sa master tabele.


Pitanje ?

Kako jemoguce uraditi DISTINCT polja npr. "BrojRac" u dole navedenom kodu.U dole kodu mi se pojavljuje vise puta jedan te isti broj racuna i iznos i sve ostala.Znam zbog cega je sve ovo,jer detail tabele je spojena preko kljuceva itd.

Negativni rezulatat dobijem:

Broj racuna, Operator,Iznos,SumPDV
*****************************
222 Medin 100 1,23..
111 Medin 200 2,23
234 Medin 300 2,34
222 Medin 100 1,23..
222 Medin 100 1,23..
222 Medin 100 1,23..
222 Medin 100 1,23..
222 Medin 100 1,23..

************************************

Zelim da dobijem rezultat :

Broj racuna, Operator,Iznos,SumPDV
*****************************
222 Medin 100 1,23..
234 Medin 300 2,34
111 Medin 200 2,23
****************************

Kod uzima sve podatke iz mster/details po operateru za period


// Postavlje trenutnog datumna u DatumOd - DatumDo
DatumOd.Date := Now;
DatumDo.Date := now;

QUpit.SQL.Clear;
QUpit.SQL.Add('select * from RacunP r join StavkeRacuna s on r.BrojRac = S.ID where (Datum between "'+DateToStr(DatumOd.Date)+'" and "'+DateToStr(DatumDo.Date)+'" and Operator = "'+frmGlavna.StatusBar1.Panels[3].Text+'")');
QUpit.Open;
LBroj.Caption := inttostr(QUpit.RecordCount);

Nadam se da sam pojasnio problem ?



Hvala svima na ponudjenim odgovorima !!!
Re: SQL DISTINCT naredba master/details 07.04.2008. u 07:49 · pre 225 meseci #2
Da li si probao sa klauzulom GROUP BY!?!
Potpis
Someone's sitting in the shade today because someone planted a tree a long time ago.
Re: SQL DISTINCT naredba master/details 07.04.2008. u 11:25 · pre 225 meseci #4
Ovako ti je najlakše:
Code:

SELECT  DISTINCT t1.[Broj racuna], t2.operator, t2.iznos, t2.sumpdv
FROM
(SELECT [Broj racuna]
 FROM
  Table1) AS t1
LEFT JOIN
(SELECT [Broj racuna], operator, iznos, sumpdv
 FROM
  Table1) AS t2
ON t1.[Broj racuna] = t2.[Broj racuna]


Potpis
Someone's sitting in the shade today because someone planted a tree a long time ago.
Re: SQL DISTINCT naredba master/details 07.04.2008. u 13:08 · pre 225 meseci #6
Citat:
_deran_: Ovako je najkrace :)

I najlakše... ;)

BTW, predložio sam GROUP BY jer nisam dovoljno pažljivo pročitao zahtev, izvinjavam se zbog toga.
Potpis
Someone's sitting in the shade today because someone planted a tree a long time ago.
Re: SQL DISTINCT naredba master/details 08.04.2008. u 21:16 · pre 225 meseci #7
Hvala Vam puno na prakticnom primjeru !!!


Nesto sam uradio sa kodom npr:
i radi prilicno dobro

// Postavlje trenutnog datumna u DatumOd - DatumDo
DatumOd.Date := Now;
DatumDo.Date := now;

QUpit.SQL.Clear;
QUpit.SQL.Add('select DISTINCT BrojRac,Operator,TB,TBNaziv,Kolicina,preracPDV,Cijena,SumPDV,BezPDV,IznosSUM from RacunP r join StavkeRacuna s on r.BrojRac = S.ID where (Datum between "'+DateToStr(DatumOd.Date)+'" and "'+DateToStr(DatumDo.Date)+'" and Operator = "'+frmGlavna.StatusBar1.Panels[3].Text+'")');
QUpit.Open;

// Drugi upit samo iznos oepratora,sumPDV,bezPDV
QUpit1.SQL.Clear;
QUpit1.SQL.add('select Operator,Sum(IznosSUM) as IznosSUM,SUM(SumPDVr) as sumPDVr,SUM(sumbezPDVr) as sumbezPDVr from RacunP.dbf r join StavkeRacuna s on r.BrojRac = S.ID where (Datum between "'+DateToStr(DatumOd.Date)+'" and "'+DateToStr(DatumDo.Date)+'" and Operator = "'+frmGlavna.StatusBar1.Panels[3].Text+'") GROUP BY Operator');
QUpit1.Open;
LBroj.Caption := inttostr(QUpit.RecordCount);
IzvjOperator.Preview;

Re: SQL DISTINCT naredba master/details 09.04.2008. u 10:59 · pre 225 meseci #8
Citat:
medixsa: 
// Postavlje trenutnog datumna u DatumOd - DatumDo
DatumOd.Date := Now;
DatumDo.Date := now;


Ovo zna da bude veoma problematično ako datum na klijentskoj mašini nije dobro podešen.

Najbolje datum pokupiti direktno iz SQL-a.
Potpis
viking ®
Re: SQL DISTINCT naredba master/details 09.04.2008. u 20:39 · pre 225 meseci #10
Citat:
medixsa: Ok hvala ti na savjetu,vec sam dobio odgovor vezano za dodjeljivanje datuma SQL upitu


Dobio si savet kako da proslediš datum kao parametar. I to je ok.

Ono o čemu je pričam je da ako ti treba trenutno vreme ili datum to pokupiš od servera, a ne sa klijentske mašine. Za firebird se za to koriste CURRENT_TIMESTAMP, CURRENT_TIME i CURRENT_DATE. Pogledaj dokumentaciju za svoj server kako se to radi tamo.
Potpis
viking ®
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme