 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 766 Aktiv.: 3.22 Kraj: Povir / Ljubljana
|
Objavljeno: Pet Sep 26, 2014 9:09 am Naslov sporočila: |
|
|
danilo je napisal/a: |
Poglej si še kako združiš dve tabeli v eno z join ukazom. Za razlago glej select stavek.
lp Danilo |
V osnovi so vsi podatki že v isti tabeli. Z dvema selectoma sem jih samo izbral ven iz iste tabele.
Še vedno pa mi ni jasno kako grem z dvema kazalcema po isti tabeli in izdaje odštevam od prevzemov? |
|
Nazaj na vrh |
|
 |
gregoral Član

Pridružen-a: Pet 24 Nov 2006 9:42 Prispevkov: 688 Aktiv.: 3.04 Kraj: Ljubljana
|
Objavljeno: Pet Sep 26, 2014 12:40 pm Naslov sporočila: |
|
|
Če sem te dobro razumel bi rad imel running balance?
Koda: |
artikel, datum, delta, stanje
čebula,010114,+123,123
čebula,020114,-100,23
čebula,030114,+321,344
čebula,040114,-100,244
|
Koda: |
SELECT a.artikel, a.datum, a.delta, (SELECT SUM(b.delta)
FROM artikli b
WHERE b.datum <= a.datum)
FROM artikli a
ORDER BY a.artikel, a.datum;
|
oziroma nekaj takega
Koda: |
SELECT a.artikel, a.datum, a.delta,
(SELECT SUM(prevzemi.delta) FROM artikli AS prevzemi WHERE prevzemi.datum <= a.datum) -
(SELECT SUM(izdaje.delta) FROM artikli AS izdaje WHERE izdaje.datum <= a.datum)
AS delta
FROM artikli a
ORDER BY a.artikel, a.datum;
|
Pazi pa da daš v pogoj tudi "id" oziroma nekjaj unikatnega po čemer boš sortiral!
Sicer bodo imeli vsi atrikli z istim imenom, datumom, ... enako stanje!
lp, gregor |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 766 Aktiv.: 3.22 Kraj: Povir / Ljubljana
|
Objavljeno: Pet Sep 26, 2014 12:58 pm Naslov sporočila: |
|
|
gregoral je napisal/a: |
Če sem te dobro razumel bi rad imel running balance? |
"running balance" si moram pogledati kaj to sploh pomeni
Ja vse je v isti tabeli tako prevzemi kot izdaje.
Vendar ima lahko vsak prevzem svojo prevzemno ceno.
Tako moram za vsako izdajo blaga izračunati oz dobiti podatek iz katerih prevzemov je bila količina izdana po FIFO.
Tako se potem lahko zgodi, da je neka količina na neki idaji izdana iz dveh ali več prevzemov torej z različnimi prevzemnimi cenami.
In ta podatek iz katerih prevzemov po kateri prevzeni ceni potrebujem da potem lahko izračunam kolikšna je bila skupna nabavna cena in preko tega RVC oz razlika v ceni do proedajne cene oz zaslužek. |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 766 Aktiv.: 3.22 Kraj: Povir / Ljubljana
|
Objavljeno: Pet Sep 26, 2014 4:37 pm Naslov sporočila: |
|
|
Ker zaloga nikoli ne gre pod nič in je preva izdaja manjša ali enaka začetnemu stanju oz prevzemu potem bi moral narediti SQL stavek takole:
Vzeti moram prvi prevzem - njegovo številko in količino
ter jo vpisat v novo tabelo nova_izdaja z podatki trenutne izdaje.
Hkrati v tabeli prevzemov od količine tega prevzema odšteti izdano količino.
nato pa kreirati zanko ki bi:
zanka:
Nadaljujem na naslednjo izdajo
preberem količino izdaje in jo odštejem od preostale količine na temu prevzemu
Če je razlika > 0
v tabelo nova_izdaja vpišem to izdajo in prevzem - njegovo številko in količino
izdaje.
nadaljujem na naslednji zapis v tabeli izdaj
Če je razlika = 0 v novo tabelo nova_izdaja vpišem to izdajo z preostalo
količino od trenutnega prevzema.
Ter vzamem naslednji prevzem.
Če je razlika < 0 v novo tabelo nova_izdaja vpišem to izdajo z preostalo
količino od trenutnega prevzema.
Ter vzamem naslednji prevzem njegovo številko in količino in spet izračunam
razliko med preostalo izdajo in novim prevzemom.
Ter to zapišem v novo tabelo nova_izdaja
ponovi zanko do konca zapisov v tabeli izdaj
čisto enostavno Sedaj moram le to "razmišljanje" prelevit v SQL stavke  |
|
Nazaj na vrh |
|
 |
gregoral Član

Pridružen-a: Pet 24 Nov 2006 9:42 Prispevkov: 688 Aktiv.: 3.04 Kraj: Ljubljana
|
Objavljeno: Sob Sep 27, 2014 1:37 am Naslov sporočila: |
|
|
@clownfish
Tole je po mojem mnenju čist preveč zakomplicirano za na forum ( tako kot si napisal ).
1) naredi si čisto enostavne primere ( par vrstic: prevzem, izdaja, izdaja ) z enostavnimi količinami in cenami
2) na teh primerih prikaži kaj bi rad izračunal
3) potem boš morda dobil kak pameten sql stavek
Koda: |
artikel, +2, 10.00€
artikel, +4, 12.00€
artikel, -1, 10.00€
artikel, -2, 11.00€
artikel, -1, 12.00€
|
Zdaj če sem te razumel te zanima kako izračunat tehle 10€, 11€ in 12€ pri izdajah?
Ali sem prikazal prave številke za ceno pir izdajah?
lp |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 766 Aktiv.: 3.22 Kraj: Povir / Ljubljana
|
Objavljeno: Ned Sep 28, 2014 10:44 pm Naslov sporočila: |
|
|
Hmm saj sem dal primer z podatki v začetnih tabelah in kaj bi na koncu želel..
Kot sem že zapisal.
Artikel z prevzemom prevzamemo po neki ceni in količini.
Potem to z izdajami iz skladišča izdajamo z neko količino. Vmes dobimo še drug tretji prevzem po drugačnih cenah in tako naprej.
Na koncu bi želel, da obdelava "porablja" količine iz starih prevzemov in če tega ni zadosti vzame iz naslednjega prevzema in tako do konca.
Zato mora obdelava vzeti količino iz prvega prevzema ter na izdaje dodajti številko tega prevzema in prevzemno ceno dokler je razlika med skupno izdano količino in količino prevzema večja od nič.
Ko je manjša od nič razdeli to izdajo kar je še ostalo iz začetnega prevzema v ta prevzem in preostanek v naslendji prevzem.. in tako do konca..
In tako je tudi prikazano z zadnji tabeli tak rezultat bi želel. |
|
Nazaj na vrh |
|
 |
gregoral Član

Pridružen-a: Pet 24 Nov 2006 9:42 Prispevkov: 688 Aktiv.: 3.04 Kraj: Ljubljana
|
Objavljeno: Pon Sep 29, 2014 7:42 pm Naslov sporočila: |
|
|
@clownfish:
Glej nimam časa da se bom poglabljal v primer ki ima veliko podtkov.
Če ne moreš prikazat na največ 5 vrsticah in 3 stolpcih, potem je zadeva prekompleksna za na forum.
Razen če se te bo kdo usmilil in si vzel za poglobitev v tvoj problem veliko časa.
Glej kot opis si dal ( med drugim ) tudi tole:
clownfish je napisal/a: |
Ker zaloga nikoli ne gre pod nič in je preva izdaja manjša ali enaka začetnemu stanju oz prevzemu potem bi moral narediti SQL stavek takole:
Vzeti moram prvi prevzem - njegovo številko in količino
ter jo vpisat v novo tabelo nova_izdaja z podatki trenutne izdaje.
Hkrati v tabeli prevzemov od količine tega prevzema odšteti izdano količino.
nato pa kreirati zanko ki bi:
zanka:
Nadaljujem na naslednjo izdajo
preberem količino izdaje in jo odštejem od preostale količine na temu prevzemu
Če je razlika > 0
v tabelo nova_izdaja vpišem to izdajo in prevzem - njegovo številko in količino
izdaje.
nadaljujem na naslednji zapis v tabeli izdaj
Če je razlika = 0 v novo tabelo nova_izdaja vpišem to izdajo z preostalo
količino od trenutnega prevzema.
Ter vzamem naslednji prevzem.
Če je razlika < 0 v novo tabelo nova_izdaja vpišem to izdajo z preostalo
količino od trenutnega prevzema.
Ter vzamem naslednji prevzem njegovo številko in količino in spet izračunam
razliko med preostalo izdajo in novim prevzemom.
Ter to zapišem v novo tabelo nova_izdaja
ponovi zanko do konca zapisov v tabeli izdaj
čisto enostavno Sedaj moram le to "razmišljanje" prelevit v SQL stavke  |
Se ti ne zdi da je to čisto preveč kompleksno za brezplačno pomoč na forumu?
Kmalu bodo glede tvojega "vprašanja za 5 minut" polne dve strani postov.
POENOSTAVI!
lp |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 766 Aktiv.: 3.22 Kraj: Povir / Ljubljana
|
Objavljeno: Tor Sep 30, 2014 8:33 am Naslov sporočila: |
|
|
Pozdravljen gregoral !
Zahvalil bi se ti za spodbudne besede ter svojo interpretacijo mojega problema.
na forum sem se obrnil zato ker sem mnenja da je moje vprašanje dokaj enostavno vendar ga sam z svojim trenuitnim zannjem SQL-a ne znam razrešiti.
Prav tako nisem napisal, da je to "vprašanje za 5 minut" vsekakor pa je moj problem za nekega poznavalca SQL-a verjetno tako enostaven, da se ob samem vprašanju samo nasmeje in samo izvajanje SQL stavkov na hitro ob jutranji kavici spiše v par vrstic kode.
Glede tvoje pripombe glede kompleksnosti prav tako lahko povem, da to ni vprašanje za ne vem kakšne eksperte SQL-a in zagotovo je na forumu kar nekaj takšnih poznavalcev, ki bi pri temu znali konstruktivno pomagati.
Sem namreč mnenja, da je v našem domačem okolju predvsem pa na temu forumu veliko zelo perspektivnih in znanja polnih pametnih uporabnikov kar se kaže tudi v samih projektih, ki so in še tečejo.
Pri razlagi svojega SQL problema pa sem prav tako podal obe začetni ter vmestno in končno tabelo kakršno želim dobiti. Žal se to v 3 stolpcih in 5 vrsticah ne da podati zato je zraven tudi opis tega kar želim da SQL stavek "dela".
In mislim, da sem izbral pravi in primeren pristop k obrazložitvi mojega problema. |
|
Nazaj na vrh |
|
 |
. Neznanec

Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Tor Sep 30, 2014 10:00 am Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 766 Aktiv.: 3.22 Kraj: Povir / Ljubljana
|
Objavljeno: Tor Sep 30, 2014 10:18 am Naslov sporočila: |
|
|
Za obdelavo in prikaz rezultatov uporabljam programsko orodje QlikView.
Sistem omogoča read only priklop na bazo iz katerih preberem podatke v interne tabele na katerih pa potem lahko delam "kar želim" ter na koncu podatke tudi prikažem v obliki tabel ali grafov.
Vseeno po branju teh podatkov iz baze v obliki, ki so prikazani že v prejšnjih tabelah moram te podatke primerno obdelati, da dobim na koncu obliko, ki vsebuje željene podatke.
Sam script ki naredi to obdelavo pa vsebuje SQL obdelavo, ki te dve tabeli na pravilen način združi ter naredi update tabele izdaj ali pa kreira novo tretjo tabelo. |
|
Nazaj na vrh |
|
 |
bpavsic Član


Pridružen-a: Pet 03 Apr 2009 20:45 Prispevkov: 354 Aktiv.: 1.79 Kraj: Maribor
|
Objavljeno: Tor Sep 30, 2014 11:43 am Naslov sporočila: |
|
|
Sicer nimam izkušenj na področju MS SQL serverja, sem pa tvojo zadevo naredil v Oracleu.. Da vsaj vidiš v čem je finta...
Kreiranje vhodnih tabel s podatki:
Koda: |
CREATE TABLE PREVZEM
(
DATUM DATE
, ARTIKEL VARCHAR2(20 CHAR)
, PREVZEM VARCHAR2(20 CHAR)
, KOLICINA NUMBER(18, 4)
, CENA NUMBER(18, 4)
, STATUS VARCHAR2(20 CHAR)
);
CREATE TABLE IZDAJA
(
DATUM DATE
, ARTIKEL VARCHAR2(20 CHAR)
, IZDAJA VARCHAR2(20 CHAR)
, KOLICINA NUMBER(18, 4)
);
INSERT INTO PREVZEM (DATUM, ARTIKEL, PREVZEM, KOLICINA, CENA, STATUS) VALUES (TO_DATE('20121204', 'YYYYMMDD'), '930826', 'PR00000', 12, 10, 'ZacStanje');
INSERT INTO PREVZEM (DATUM, ARTIKEL, PREVZEM, KOLICINA, CENA, STATUS) VALUES (TO_DATE('20121205', 'YYYYMMDD'), '930826', 'PR00131', 5, 12, 'Prevzem');
INSERT INTO PREVZEM (DATUM, ARTIKEL, PREVZEM, KOLICINA, CENA, STATUS) VALUES (TO_DATE('20130627', 'YYYYMMDD'), '930826', 'PR00174', 10, 14, 'Prevzem');
INSERT INTO PREVZEM (DATUM, ARTIKEL, PREVZEM, KOLICINA, CENA, STATUS) VALUES (TO_DATE('20130910', 'YYYYMMDD'), '930826', 'PR00193', 13, 18, 'Prevzem');
INSERT INTO PREVZEM (DATUM, ARTIKEL, PREVZEM, KOLICINA, CENA, STATUS) VALUES (TO_DATE('20131023', 'YYYYMMDD'), '930826', 'PR00231', 6, 10, 'Prevzem');
INSERT INTO PREVZEM (DATUM, ARTIKEL, PREVZEM, KOLICINA, CENA, STATUS) VALUES (TO_DATE('20140116', 'YYYYMMDD'), '930826', 'PR00452', 4, 16, 'Prevzem');
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20121207', 'YYYYMMDD'), '930826', 'IZD00213', -2);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20121207', 'YYYYMMDD'), '930826', 'IZD00214', -3);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20130103', 'YYYYMMDD'), '930826', 'IZD00215', -1);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20130110', 'YYYYMMDD'), '930826', 'IZD00216', -1);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20130123', 'YYYYMMDD'), '930826', 'IZD00217', -3);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20130306', 'YYYYMMDD'), '930826', 'IZD00218', -1);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20130508', 'YYYYMMDD'), '930826', 'IZD00219', -3);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20130603', 'YYYYMMDD'), '930826', 'IZD00220', -1);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20130708', 'YYYYMMDD'), '930826', 'IZD00221', -2);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20130727', 'YYYYMMDD'), '930826', 'IZD00222', -3);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20130801', 'YYYYMMDD'), '930826', 'IZD00223', -2);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20130816', 'YYYYMMDD'), '930826', 'IZD00224', -3);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20130904', 'YYYYMMDD'), '930826', 'IZD00225', -1);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20130905', 'YYYYMMDD'), '930826', 'IZD00226', -1);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20130918', 'YYYYMMDD'), '930826', 'IZD00227', -1);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20131008', 'YYYYMMDD'), '930826', 'IZD00228', -1);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20131008', 'YYYYMMDD'), '930826', 'IZD00229', -2);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20131011', 'YYYYMMDD'), '930826', 'IZD00230', -3);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20131015', 'YYYYMMDD'), '930826', 'IZD00231', -4);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20131016', 'YYYYMMDD'), '930826', 'IZD00232', -2);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20131029', 'YYYYMMDD'), '930826', 'IZD00233', -2);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20131107', 'YYYYMMDD'), '930826', 'IZD00234', -1);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20131116', 'YYYYMMDD'), '930826', 'IZD00235', -1);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20140109', 'YYYYMMDD'), '930826', 'IZD00236', -1);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20140128', 'YYYYMMDD'), '930826', 'IZD00237', -1);
INSERT INTO IZDAJA (datum, artikel, izdaja, kolicina) VALUES (TO_DATE('20140128', 'YYYYMMDD'), '930826', 'IZD00238', -1);
|
Select, ki združi obe tabeli in vrne rezultat:
Koda: |
select To_char(iz_datum, 'yyyymmdd') datum, iz_artikel artikel, iz_naziv izdaja, kolicina, pr_naziv prevzem, pr_cena cena from (
select case when prevzem.sumkolicin - prevzem.kolicina <= -(izdaja.sumkolicin - izdaja.kolicina) and prevzem.sumkolicin >= -izdaja.sumkolicin then izdaja.kolicina
when prevzem.sumkolicin - prevzem.kolicina <= -(izdaja.sumkolicin - izdaja.kolicina) then -(prevzem.sumkolicin + izdaja.sumkolicin - izdaja.kolicina)
when prevzem.sumkolicin - prevzem.kolicina >= -(izdaja.sumkolicin - izdaja.kolicina) and prevzem.sumkolicin <= -izdaja.sumkolicin then -prevzem.kolicina
else izdaja.sumkolicin + prevzem.sumkolicin - prevzem.kolicina end kolicina,
izdaja.datum iz_datum, izdaja.izdaja iz_naziv, izdaja.kolicina iz_kolicina, izdaja.sumkolicin - izdaja.kolicina iz_stanje_pred, izdaja.sumkolicin iz_stanje_po, izdaja.artikel iz_artikel,
prevzem.datum pr_datum, prevzem.prevzem pr_naziv, prevzem.kolicina pr_kolicina, prevzem.sumkolicin - prevzem.kolicina pr_stanje_pred, prevzem.sumkolicin pr_stanje_po, prevzem.status pr_status, prevzem.cena pr_cena from
(select datum, artikel, izdaja, kolicina, SUM(kolicina) OVER (ORDER BY artikel, datum ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) sumkolicin from izdaja) izdaja,
(select datum, artikel, prevzem, kolicina, cena, status, SUM(kolicina) OVER (ORDER BY artikel, datum ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) sumkolicin from prevzem) prevzem
where izdaja.artikel = prevzem.artikel and prevzem.sumkolicin > -(izdaja.sumkolicin - izdaja.kolicina)
and prevzem.sumkolicin - prevzem.kolicina < -izdaja.sumkolicin
order by izdaja.artikel, izdaja.datum, izdaja.sumkolicin desc, prevzem.sumkolicin)
|
Rezultat:
Koda: |
"DATUM" "ARTIKEL" "IZDAJA" "KOLICINA" "PREVZEM" "CENA"
"20121207" "930826" "IZD00213" -2 "PR00000" 10
"20121207" "930826" "IZD00214" -3 "PR00000" 10
"20130103" "930826" "IZD00215" -1 "PR00000" 10
"20130110" "930826" "IZD00216" -1 "PR00000" 10
"20130123" "930826" "IZD00217" -3 "PR00000" 10
"20130306" "930826" "IZD00218" -1 "PR00000" 10
"20130508" "930826" "IZD00219" -1 "PR00000" 10
"20130508" "930826" "IZD00219" -2 "PR00131" 12
"20130603" "930826" "IZD00220" -1 "PR00131" 12
"20130708" "930826" "IZD00221" -2 "PR00131" 12
"20130727" "930826" "IZD00222" -3 "PR00174" 14
"20130801" "930826" "IZD00223" -2 "PR00174" 14
"20130816" "930826" "IZD00224" -3 "PR00174" 14
"20130904" "930826" "IZD00225" -1 "PR00174" 14
"20130905" "930826" "IZD00226" -1 "PR00174" 14
"20130918" "930826" "IZD00227" -1 "PR00193" 18
"20131008" "930826" "IZD00228" -1 "PR00193" 18
"20131008" "930826" "IZD00229" -2 "PR00193" 18
"20131011" "930826" "IZD00230" -3 "PR00193" 18
"20131015" "930826" "IZD00231" -4 "PR00193" 18
"20131016" "930826" "IZD00232" -2 "PR00193" 18
"20131029" "930826" "IZD00233" -2 "PR00231" 10
"20131107" "930826" "IZD00234" -1 "PR00231" 10
"20131116" "930826" "IZD00235" -1 "PR00231" 10
"20140109" "930826" "IZD00236" -1 "PR00231" 10
"20140128" "930826" "IZD00237" -1 "PR00231" 10
"20140128" "930826" "IZD00238" -1 "PR00452" 16
|
|
|
Nazaj na vrh |
|
 |
bpavsic Član


Pridružen-a: Pet 03 Apr 2009 20:45 Prispevkov: 354 Aktiv.: 1.79 Kraj: Maribor
|
Objavljeno: Tor Sep 30, 2014 11:51 am Naslov sporočila: |
|
|
Pa da še malo komentiram logiko za SQLom:
- osnova sta 2 selecta na sredini (izdaja in prevzem), ki imata dodano polje "sumkolicin", kar je v bistvu "running balance", na kar te je že opozoril gregoral
- ta dva selecta sedaj kartezično združimo (vsak prejem z vsako izdajo) in odstranimo tiste, kjer se ne ujema artikel (lahko bi se dodal še datum, npr. prevzem.datum < izdaja.datum) ter tiste, kjer je stanje zaloge pred in po prejemu/izdaji za nas neveljavno (torej npr. zaloga po prejemu < zaloge pred izdajo ali pa zaloga pred prejemom > zaloge po izdaji)
- nato s case-om še izračunom delež izdaje znotraj vsakega prejema, ki je ostal v paru z izdajo.
V grobem je to to... |
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 766 Aktiv.: 3.22 Kraj: Povir / Ljubljana
|
Objavljeno: Tor Sep 30, 2014 12:18 pm Naslov sporočila: |
|
|
bpavsic
HVALA za nazoren prikaz in "rešitev" mojega problema.
Sam SQL si bom pogledal in ga poizkusil tudi razumeti čeprav že sedaj lahko komentiram da to precej presega moje trenutno SQL znanje.
Sedaj moram to samo že prekonvertirati v QlikView script obliko pa bo
Še enkrat HVALA!!!
Nazadnje urejal/a clownfish Tor Sep 30, 2014 12:33 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
. Neznanec

Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Tor Sep 30, 2014 12:32 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
bpavsic Član


Pridružen-a: Pet 03 Apr 2009 20:45 Prispevkov: 354 Aktiv.: 1.79 Kraj: Maribor
|
Objavljeno: Tor Sep 30, 2014 12:37 pm Naslov sporočila: |
|
|
Upam, da ti bo šlo. Lahko, da so razlike med Oracleom in MS SQL serverjem (že joini so npr. drugačni). Ampak to ni tako bistveno.
Bistveno je, da razumeš, zakaj stvar tako dela, kot dela in si potem prepišeš SQL stavek v tako obliko, da ga bo MS SQL razumel.
Tudi sam sem tega selecta lotil po delih. Najprej notranja selecta s stanjem zaloge. Ko ti ta 2 delata tako kot treba, nadaljuješ, si povežeš oba in začneš odstranjevati pare (recorde), ki niso relevantni za tvoj izhod. Ko ti select vrne pravilne kombinacije izdaj in prevzemov v pravilnem vrstnem redu, pa se začneš ukvarjat z izračunom količine, ki gre iz vsakega prejema na izdajo.
Aja, mogoče še bo treba kak Group By zaradi artiklov, predvsem tam v notranjih selectih, ko si izračunava zalogo (da ne bi zaloga bila skupna za vse artikle )
edit:
Glede OVER-ja... Gregoral je že zgoraj napisal drugačno rešitev za izračun zaloge, tako da če to ne bo delovalo, uporabi tisto. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 9 dni
Powered by phpBB © 2001, 2005 phpBB Group
|