Nyt olisi tarvetta laskea yhteen parin varastopaikan tiedot ja tällä
lukemalla päivittää sitten toinen varastopaikka. Eli käytännössä siirtää
varastopaikan 1 saldot varastopaikan 3 lukemaan kuuluvaksi.
Yksittäisen tuotteen tapauksessahan se menisi jotenkin näin
pseudokoodimaiseen tyyliin jos nyt edes tuotakaan saisi toimimaan.
update varasto
set saldo = saldo + (select saldo from varasto where tuote =
HILAVITKUTIN and varastopaikka = 1)
where tuote = HILAVITKUTIN and varastopaikka = 3
Mitenköhän tästä voisi lähteä liikkeelle?
Laitoin nyt follarit .alkeisiin
--
T:pi Marko, ~~~ http://marko.koivuniemi.info/ ~~~
Yksittäisellä koodilla kyllä toimii:
update [KANTA].dbo.[TAULU]
set SALDO = SALDO + (SELECT APU.SALDO FROM [KANTA].dbo.[TAULU] APU WHERE
TUOTE = 'HILAVITKUTIN' and VARASTOPAIKKA=1)
where koodi = 'HILAVITKUTIN' and VP=3
Mutta sitten tämä kiertämään kaikki koodit läpi. Vaatii pähkäilyä. Nyt
lueskelemaan WHILE-lauseiden tai muiden luuppien käyttöä ja sitten vasta
ammutaan itseään jalkaan.
Kelpaako ihan taulujen kytky?
Alkutilanne:
mysql> select * from temp.varasto;
+--------------+---------------+-------+
| tuote | varastopaikka | saldo |
+--------------+---------------+-------+
| HILAVITKUTIN | 1 | 2 |
| HILAVITKUTIN | 2 | 3 |
| HILAVITKUTIN | 3 | -5 |
| HITKUTIN | 1 | 12 |
| HITKUTIN | 2 | 8 |
| HITKUTIN | 3 | -3 |
+--------------+---------------+-------+
6 rows in set (0.00 sec)
Tarkistanpa osaako laskea:
mysql> select a.tuote , a.saldo saldo1, b.saldo saldo3, a.saldo+b.saldo
summa
-> from temp.varasto a, temp.varasto b
-> where a.tuote=b.tuote
-> and a.varastopaikka=1 and b.varastopaikka=3;
+--------------+--------+--------+-------+
| tuote | saldo1 | saldo3 | summa |
+--------------+--------+--------+-------+
| HILAVITKUTIN | 2 | -5 | -3 |
| HITKUTIN | 12 | -3 | 9 |
+--------------+--------+--------+-------+
2 rows in set (0.00 sec)
Koitetaans päivittääkin:
mysql>
mysql> update temp.varasto a, temp.varasto b
-> set a.saldo = a.saldo+b.saldo, b.saldo=0
-> where
-> a.tuote=b.tuote and a.varastopaikka=1 and b.varastopaikka=3;
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4 Changed: 4 Warnings: 0
Kurkataan mihin osui:
mysql>
mysql> select a.tuote , a.saldo saldo1, b.saldo saldo3, a.saldo+b.saldo
summa
-> from temp.varasto a, temp.varasto b
-> where a.tuote=b.tuote
-> and a.varastopaikka=1 and b.varastopaikka=3;
+--------------+--------+--------+-------+
| tuote | saldo1 | saldo3 | summa |
+--------------+--------+--------+-------+
| HILAVITKUTIN | -3 | 0 | -3 |
| HITKUTIN | 9 | 0 | 9 |
+--------------+--------+--------+-------+
2 rows in set (0.01 sec)
mysql> select * from temp.varasto;
+--------------+---------------+-------+
| tuote | varastopaikka | saldo |
+--------------+---------------+-------+
| HILAVITKUTIN | 1 | -3 |
| HILAVITKUTIN | 2 | 3 |
| HILAVITKUTIN | 3 | 0 |
| HITKUTIN | 1 | 9 |
| HITKUTIN | 2 | 8 |
| HITKUTIN | 3 | 0 |
+--------------+---------------+-------+
6 rows in set (0.00 sec)
Tuossa oli kai ajatus 'siirtää' se saldo joten toki nuo kolmosvaraston
saldot nollautuvat?
Ja uskottavalta näyttää nuo loppusummatkin?
mysql> select tuote, sum(saldo) total from temp.varasto group by tuote;
+--------------+-------+
| tuote | total |
+--------------+-------+
| HILAVITKUTIN | 0 |
| HITKUTIN | 17 |
+--------------+-------+
Osuisko tuolla edes omaan jalkaansa?
Näyttää lupaavalta ja oikeastaan hävettävän itsestäänselvältä
lähestymistavalta. Kiitos jo etukäteen - yritän huomenna pureksia tämän
mysliannoksen sqlserverin kera.