Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

(T-)SQL-kyselyongelma

5 views
Skip to first unread message

Marko Koivuniemi

unread,
Nov 5, 2010, 1:46:12 AM11/5/10
to

Ei tämä nyt ohjelmointia ole, mutta vastaavaa ajattelumallia vaatii.
Lähtötilanne on, että erään ohjelman tuotetietokannassa on
varastopaikkatieton varastosaldo tyyliin:
tuote |varastopaikka | saldo
HILAVITKUTIN |1 | 2
HILAVITKUTIN |2 | 3
HILAVITKUTIN |3 | -5

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/ ~~~

Marko Koivuniemi

unread,
Nov 5, 2010, 5:29:40 AM11/5/10
to

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.

footy

unread,
Nov 5, 2010, 3:16:13 PM11/5/10
to

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?

Marko Koivuniemi

unread,
Nov 7, 2010, 4:07:28 PM11/7/10
to

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.

0 new messages