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

Pomoć oko upita

[es] :: MS SQL :: Pomoć oko upita

[ Pregleda: 2351 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zof

Član broj: 37991
Poruke: 34
*.litostroj.com.

Sajt: www.tutorijali.org


Profil

icon Pomoć oko upita08.07.2009. u 12:22 - pre 179 meseci
Molio bih Vas za pomoć ... imam npr. 4 tabele

Narudzbenica
SifraNarudzbenice | SifraPartnera | DatumNarudžbenice
0001 | 01 | 27.05.2009
0002 | 02 | 15.05.2009

Partner
SifraPartnera | NazivPartnera
01 | Partner-01
02 | Partner-02

PostavkeNarudzbenice
SifraNarudzbenice | BrojPozicijeNaNarudzbenici | SifraArtikla | ProdajnaCena
0001 | 1 | 001 | 200din
0001 | 2 | 001 | 200din
0001 | 3 | 002 | 300din
0001 | 4 | 003 | 500din
0002 | 1 | 004 | 550din
0002 | 2 | 004 | 550din

Cene
SifraArtikla | NabavnaCena | DatumPromeneCene
001 | 100din 07.03.2009
002 | 200din 12.02.2009
003 | 400din 12.01.2009
003 | 450din 19.01.2009
003 | 420din 30.03.2009
004 | 300din 12.02.2009

Za npr. ovaj upit

Code:
SELECT SifraNarudzbenice, NazivPartnera, BrojPozicijeNaNarudzbenici, 
NabavnaCena, ProdajnaCena, SifraArtikla, DatumNarudžbenice, DatumPromeneCene
FROM Narudzbenica,  Partner, PostavkeNarudzbenice, Cene 
WHERE  
Narudzbenica.SifraNarudzbenice=PostavkeNardzbenice.SifraNarudzbenice and
Narudzbenica.SifraPartnera=Partner.SifraPartnera and
PostavkeNardzbenice.SifraArtikla=Cene.SifraArtikla 
DatumNarudžbenice > DatumPromeneCene
ORDER BY SifraPartnera, SifraNarudzbenice, BrojPozicijeNaNarudzbenici


Dobijem sledeći rezultat

NazivPartnera | SifraNarudzbenice | BrojPozicijeNaNarudzbenici | NabavnaCena | ProdajnaCena | SifraArtikla | DatumNarudžbenice | DatumPromeneCene
Partner-01 | 0001 | 1 | 100din | 200din | 001 | 27.05.2009 | 07.03.2009
Partner-01 | 0001 | 2 | 100din | 200din | 001 | 27.05.2009 | 07.03.2009
Partner-01 | 0001 | 3 | 200din | 300din | 002 | 27.05.2009 | 12.02.2009
Partner-01 | 0001 | 4 | 400din | 500din | 003 | 27.05.2009 | 12.01.2009
Partner-01 | 0001 | 4 | 450din | 500din | 003 | 27.05.2009 | 19.01.2009
Partner-01 | 0001 | 4 | 420din | 500din | 003 | 27.05.2009 | 30.03.2009
Partner-02 | 0002 | 1 | 300din | 550din | 004 | 15.05.2009 | 12.02.2009
Partner-02 | 0002 | 2 | 300din | 550din | 004 | 15.05.2009 | 12.02.2009

Ponavlja mi istu poziciju na narudzbenici za različite datume promene cena

A treba mi rezultat bez plavih polja tj. Da mi kao rezultat da samo kolonu sa poslednjim datumom promene cena a da pri tome datum i dalje bude ispod datuma narudžbenice

NazivPartnera | SifraNarudzbenice | BrojPozicijeNaNarudzbenici | NabavnaCena | ProdajnaCena | SifraArtikla | DatumNarudžbenice | DatumPromeneCene
Partner-01 | 0001 | 1 | 100din | 200din | 001 | 27.05.2009 | 07.03.2009
Partner-01 | 0001 | 2 | 100din | 200din | 001 | 27.05.2009 | 07.03.2009
Partner-01 | 0001 | 3 | 200din | 300din | 002 | 27.05.2009 | 12.02.2009
Partner-01 | 0001 | 4 | 400din | 500din | 003 | 27.05.2009 | 12.01.2009
Partner-01 | 0001 | 4 | 450din | 500din | 003 | 27.05.2009 | 19.01.2009

Partner-01 | 0001 | 4 | 420din | 500din | 003 | 27.05.2009 | 30.03.2009
Partner-02 | 0002 | 1 | 300din | 550din | 004 | 15.05.2009 | 12.02.2009
Partner-02 | 0002 | 2 | 300din | 550din | 004 | 15.05.2009 | 12.02.2009

ja se izvinjavam što je post ovako nepregledan ali nemam pojma kako se ubacuju tabele u poruku hvala
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Pomoć oko upita08.07.2009. u 13:22 - pre 179 meseci
Pa umesto što čuvaš cenu u stavci narudžbenice, logično je da tu čuvaš id sloga iz tabele cene.

A ako baš hoćeš ovako, pretpostavljam da je najlakše da cenu i datum promene vadiš subselectom sa TOP 1.
 
Odgovor na temu

zof

Član broj: 37991
Poruke: 34
*.litostroj.com.

Sajt: www.tutorijali.org


Profil

icon Re: Pomoć oko upita08.07.2009. u 13:33 - pre 179 meseci
hvala na brzom odgovoru ... strukturu baze ne mogu da menjam, mogu samo upite da vršim nad njom ... probao sam sa TOP 1 i nije mi islo:)
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Pomoć oko upita08.07.2009. u 14:07 - pre 179 meseci
Sta u stvari kveri treba da uradi? IZ datog SELECTa tesko se cita logika, moras da nam objasnis. Nesto kao "Kveri treba da ispise sve narudzbenice i stavke, sa prodajnom cenom, i plus da se pokaze datum kada je ta cena stupila na snagu". Ovom sam ja pretpostavio, tvoj zadatak moze biti drugaciji.

Znaci, opisi sta kveri treba da vrati, pa cemo moci da pokusamo nesto. I kazi u kojoj verziji MS SQL radi s(MS SQL 7.0, 2000, 2005, 2008)
 
Odgovor na temu

zof

Član broj: 37991
Poruke: 34
*.litostroj.com.

Sajt: www.tutorijali.org


Profil

icon Re: Pomoć oko upita08.07.2009. u 14:43 - pre 179 meseci
.. koristim MS SQL 2005 ... kveri treba da ispiše sve sto je SELECTU (NazivPartnera, SifraNarudzbenice, BrojPozicijeNaNarudzbenici, NabavnaCena, ProdajnaCena, SifraArtikla, DatumNarudžbenice, DatumPromeneCene)

Inace nabavna cena artikla je ta koja se menja (npr. mesecno).
Recimo da imamo jednu narudzbenicu čiji je datum 27.05.2009 (maj). Ta narudzbenica ima svoje stavke (odnosno pozicije) na kojima se nalazi neki arikal (čija ce nabavna cena menjala npr. u januaru, martu, aprilu), ovaj moj upit izvuče sve stavke za tu narudzbenicu za sve promene cena, a meni je potrbna samo stavka sa poslenjom promenom (znaci ova u Aprilu), ali da je uslov da 'DatumPromeneCene' mora biti manji od 'DatumNarudžbenice' (u ovom slucaju 27.05.2009)

npr. rezultat za moj upit

narudžbenica1 | BrojPozicijeNaNarudzbenici 1 ... ostalo ... Datum Promene Cene (januar)
narudžbenica1 | BrojPozicijeNaNarudzbenici 1 ... ostalo ... Datum Promene Cene (mart)
narudžbenica1 | BrojPozicijeNaNarudzbenici 1 ... ostalo ... Datum Promene Cene (april)

za istu narudžbenicu i istu poziciju i isti artikal ispise tri cene zbog polja 'DatumPromeneCene' u tabeli CENA, a meni je potreban samo prvi ispod datuma narudžbenice u ovom primeru 27.05.2009 (maj)
odnosno

narudžbenica1 | BrojPozicijeNaNarudzbenici 1 ... ostalo ... Datum Promene Cene (april)

... uffff ... mnogo sam zakomplikovao
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Pomoć oko upita08.07.2009. u 16:30 - pre 179 meseci
" a meni je potrbna samo stavka sa poslenjom promenom (znaci ova u Aprilu), " Ovo je vec bolje, ali nije jos uvek jasno.

"ovaj moj upit izvuče sve stavke za tu narudzbenicu za sve promene cena, a meni je potrbna samo stavka sa poslenjom promenom (znaci ova u Aprilu), ali da je uslov da 'DatumPromeneCene' mora biti manji od 'DatumNarudžbenice' (u ovom slucaju 27.05.2009)"

Ovako bih preformulisao pitanje: Za svaku stavku na narudzbenici, pokazi cenu po kojoj je prodata i pokazi kada je ta cena pocela da vazi.

Resenje - kao sto je Jablan predlozio - koristiti subquery da se izvuce datum cene koja je vazila na dan kreiranja narudzbenice


-- Ovo spaja narudzbenice i stavke, to znas i sam (ali ne koristis JOIN, zasto?)
Code:

SELECT N.SifraNarudzbenice,
       N.DatumNarudzbenice,
       P.SifraArtikal     ,
       P.ProdajnaCena
FROM   Narudzbenica AS N
JOIN   PostavkeNarudzbenice AS P
ON     N.SifraNarudzbenice = P.SifraNarudzbenice


-- Ovako dodajes datum vazenja cene:
Code:

SELECT N.SifraNarudzbenice,
       N.DatumNarudzbenice,
       P.SifraArtikal     ,
       P.ProdajnaCena     ,
       DatumVazenjacene =
       (SELECT MAX(C.DatumPromeneCene)
       FROM    Cene AS C
       WHERE   C.SifraArtikla     = P.sifraArtikla
           AND C.DatumPromeneCene < N.DatumNarudzbenice 
       )
FROM   Narudzbenica
JOIN   PostavkeNarudzbenice AS P
ON     N.SifraNarudzbenice = P.SifraNarudzbenice


U subkveriju pise AND C.DatumPromeneCene < N.DatumNarudzbenice
Moglo bi da pise i AND C.DatumPromeneCene <= N.DatumNarudzbenice
Ovo poslednje dozvolilo bi da se naruci roba po ceni koja vazi od danas (recimo cena se promenila ujutru, narudzbenica je napravljena u podne.) Medjutim, ako je pravilo firme da se cena menja recimo uvece, pa svi danas koriste cenu od juce, onda je OK i ovako.

Ako iam neka sitna greska u sintaksi, moraces sam da je pronadjes i ispravis, jer nemam kako da proverim upit, pa kucam direktno u poruku.

Nadam se da je pomoglo.



Ti sad dodaj partnera na sve ovo.
 
Odgovor na temu

[es] :: MS SQL :: Pomoć oko upita

[ Pregleda: 2351 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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