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

Query problem OUTER JOIN

[es] :: MS SQL :: Query problem OUTER JOIN

[ Pregleda: 3619 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Captain Jack
Beograd - Vozdovac

Član broj: 44753
Poruke: 10
*.71.EUnet.yu.



Profil

icon Query problem OUTER JOIN29.03.2005. u 23:18 - pre 231 meseci
Pokusavam da napravim stored proceduru koja se sastoji iz dve tabele NALOZI i PLACANJA sa svrhom da mi izlista SVE naloge i prikaze njihova placanja ako ih ima, jer nisu svi nalozi placeni.

U query dizajneru (radim front end u accessovom .adp projektu) definisem vezu tipa OUTER JOIN da mi obuhvati sve zapise iz tabele NALOZI i pokaze, naravno pripadajuca placanja iz tabele PLACANJA. E, sad, procedura radi dobro sve dok joj ne postavim parametre, a to su datumi placanja. Kad stavim parametre, tj. da mi pokaze SVE naloge i placanja samo u odabranom periodu kao rezultat dobijem samo one naloge koji su placeni u periodu koji je zadat, a ne sve naloge kao u slucaju bez parametara!

Drugim recima, sql server mi vezu OUTER JOIN pretvori de fakto u INNER JOIN, pokazuje samo preklapajuce zapise..

Pokusao sam da ga zavaram pa sam osim parametara, kao kriterijum u tabeli PLACANJA dodao jos i IS NULL za kolonu datum placanja ali i tada ne daje sve naloge mada poveca broj zapisa - ne znam u stvari kako ih je slozio.


Code:
ALTER PROCEDURE dbo.StoredProcedure1
(@PocetniDatum smalldatetime,
@KrajnjiDatum smalldatetime)
AS SELECT     SUM(dbo.Placanja.IznosPlacanja) AS Expr1, dbo.Nalozi.ID
FROM         dbo.Placanja RIGHT OUTER JOIN
                      dbo.Nalozi ON dbo.Placanja.ID = dbo.Nalozi.ID
GROUP BY dbo.Nalozi.ID, dbo.Placanja.DatumPlacanja
HAVING      (dbo.Placanja.DatumPlacanja BETWEEN @PocetniDatum AND @KrajnjiDatum) OR
                      (dbo.Placanja.DatumPlacanja IS NULL)



Ovakav problem sam u accessu resavao tako sto sam snimao poseban parametarski query za tabelu PLACANJA i poseban query NALOZI pa sam u accessovom query dizajneru spajao querije a ne tabele, i onda su veze radile pravilno.

U accessovom adp projektu ne mogu da se u dizajneru spajaju procedure a obicni pogledi (view) nemaju parametre...Kako resavate slicne stvari?

Da nisam pogresio u sastavljanju procedure?..Mozda trebaju da idu in line funkcije umesto procedure?....



cj
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Query problem OUTER JOIN30.03.2005. u 08:00 - pre 231 meseci
Savetujem ti da napišeš strukturu tabela i šta želiš da dobiješ query-jem (najbolje sa primerom), pa će ti neko pomoći. Inače, stored procedure jesu stvar koja tebi treba.
 
Odgovor na temu

Captain Jack
Beograd - Vozdovac

Član broj: 44753
Poruke: 10
*.dialup.sezampro.yu.



Profil

icon Re: Query problem OUTER JOIN30.03.2005. u 12:56 - pre 231 meseci
Znaci, dve tabele: NALOZI i PLACANJA

Nalozi - polje ID int broj za identifikaciju; ukupno 520 zapisa
Placanja - polje IznosPlacanja i polje DatumPlacanja; ukupno 474 zapisa

Osnovna relacija u bazi izmedju NALOGA i PLACANJA je jedan prema vise, tj Inner join - jedan nalog moze imati vise placanja.

Zelim query-proceduru koja je sastavljen samo od dve kolone, ID iz tabele NALOGA i IznosPlacanja iz tabele PLACANJA koji ce dati sve naloge ukupno 520 zapisa sa iznosom tj zbirom placanja za svaki nalog!

I jos bih hteo da zadam vremenski interval za izvrsena placanja od - do tj da bude sa dva parametra tipa @PocetniDatum i @Krajnji datum.

Procedura radi dobro sve dok joj ne zadam parametre, onda umesto da mi pokaze svih 520 naloga pokazuje samo one koji su placeni u zadatom vremenskom intervalu a treba svih 520....Kako da prikaze sve a da ostanu parametri?






cj
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Query problem OUTER JOIN30.03.2005. u 13:19 - pre 231 meseci
Opet nisi napisao koja polja (pre svega glavne i spoljne ključeve) imaš u te dve tabele ali mislim da sam ukapirao šta hoćeš.

Ovako:

Ako hoćeš da izlistaš samo naloge koji su plaćani, sa svim plaćanjima, koristiš inner join.
Ako hoćeš da izlistaš sve naloge, bez obzira da li su plaćeni, sa svim plaćanjima, koristiš left join.

Pretpostavljam da hoćeš ovu drugu varijantu.

Dakle (otprilike):
Code:

SELECT N.*, P.*
FROM Nalozi N
LEFT JOIN Placanja P ON N.SifraNaloga = P.SifraNaloga
WHERE 
P.Datum IS NULL
OR P.Datum BETWEEN @StartDate AND @EndDate

 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Query problem OUTER JOIN30.03.2005. u 13:32 - pre 231 meseci
A, ukapirao sam šta ti pravi problem: vremenski opseg.

Uradi ovako:
Code:

SELECT N.SifraNaloga, SUM(P.Iznos)
FROM Nalozi N
LEFT JOIN Placanja P ON N.SifraNaloga = P.SifraNaloga 
AND (P.Datum IS NULL OR P.Datum BETWEEN @StartDate AND @EndDate)
GROUP BY N.SifraNaloga
 
Odgovor na temu

Captain Jack
Beograd - Vozdovac

Član broj: 44753
Poruke: 10
*.122.eunet.yu.



Profil

icon Re: Query problem OUTER JOIN30.03.2005. u 23:06 - pre 231 meseci
Da, da, vremenski opseg mi je problem.. Bez tog vremenskog uslova procedura radi dobro.

Kljuc izmedju ovih tabela je polje ID, primarni u tabeli Naloga i spoljni u Placanjima.
Jos uzimam dva polja iz Placanja, DatumPlacanja i IznosPlacanja.

Naravno da tabele imaju dosta polja ali ih izbacujem iz upita da ne prave zbrku, hocu samo da vidim metodologiju kako da uradim spoj.

Tvoj primer sam isprobao ali mi ne daje dobre rezultate..



Ne mogu da verujem da se ovako jednostavan upit tesko pravi.
cj
 
Odgovor na temu

Captain Jack
Beograd - Vozdovac

Član broj: 44753
Poruke: 10
*.ppp-bg.sezampro.yu.



Profil

icon Re: Query problem OUTER JOIN31.03.2005. u 15:30 - pre 231 meseci
Izgleda da sam resio problem..

Snimio sam poseban upit sa poljima iz tabele Placanja u obliku in line funkcije sa datumskim parametrima. Zatim sam otvorio novu st proceduru i umesto polja iz tabele Placanja koristio sam tu funkciju..

Tek onda mi lista sve naloge, i placene i neplacene..


Pozdrav.


cj
 
Odgovor na temu

[es] :: MS SQL :: Query problem OUTER JOIN

[ Pregleda: 3619 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

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