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

Trigger za updateovanje druge tabele priliko unosa vrijednosti

[es] :: Baze podataka :: Trigger za updateovanje druge tabele priliko unosa vrijednosti

[ Pregleda: 3674 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

eon

Član broj: 10450
Poruke: 53
*.as54.bi.bih.net.ba.



Profil

icon Trigger za updateovanje druge tabele priliko unosa vrijednosti05.06.2004. u 12:31 - pre 241 meseci
Imam sljedeci problem:
dvije tabele
Kupci (kupac_id, ime, ukupno_uplaceno)
Uplate (kupac_id, vrijednost_uplate)
Zelim napraviti trigger koji kada se unese nova uplata za kupca u tabelu Uplate,
sabere sve uplate za tog kupca iz te tabele i azurira vrijednost ukupno_uplaceno u tabeli Kupci za tog kupca.
Znam da nije bas najbolji dizajn ovo, i da zapravo polje ukupno_uplaceno ne bi trebalo postojati, ali trenutno moram koristiti ovo rjesenje (konkretan primjer je slozeniji i drugaciji i nisam u mogucnosti dinamicki sumirati vrijednost_uplate prilikom upotrebe zbog nedostataka reporting engine-a).
Koristim SQL Server 2000.
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Trigger za updateovanje druge tabele priliko unosa vrijednosti05.06.2004. u 13:42 - pre 241 meseci
Code:

CREATE TRIGGER Uplate_UI ON Uplate
AFTER INSERT, UPDATE
AS
DECLARE @KupID int
SELECT @KupID = kupac_id FROM Inserted

UPDATE Kupci
SET
ukupno_uplaceno = (SELECT SUM(vrijednost_uplate) FROM Uplate
                    WHERE
                    Kupci.kupac_id = @KupID)


Ti reče da ti treba samo nakon INSERT pa komotno možeš da imaš samo AFTER INSERT AS, mada mislim da je bolje da obradiš i UPDATE. Što se tiče tog polja ukupno_uplaceno, možda bi mogao da kreiraš neki view i izbegneš sve ovo.
Commercial-Free !!!
 
Odgovor na temu

eon

Član broj: 10450
Poruke: 53
*.as54.bi.bih.net.ba.



Profil

icon Re: Trigger za updateovanje druge tabele priliko unosa vrijednosti06.06.2004. u 21:05 - pre 241 meseci
Tnx. Uradio sam i za update i za delete. Ma vjerovatno se sve to moglo odraditi bolje, ali mi je zurba bila, a ovo sam prepoznao kao zgodno rjesenje.
U biti sam imao (izbacio sam nebitna polja):

tabela kupaca
________
kupacid
naziv

tabela uplata
________
kupacid
uplataid
vrijednost

tabela radnih naloga
________
nalogid
kupacid
vrijednost_naloga

Trebao mi je report koji
izlistava podatke o kupcu, sumu svih uplata za kupca, sumu svih naloga za kupca, te razliku izmedju to dvoje.
Prvo sam pokusao napraviti subreports, glavni bi izlistavao kupce, a dva subreports bi izlistavali detalje za tog kupca. Medjutim, report engine mi nije omogucavao da oduzmem od sume prvog subreporta sumu drugog subreporta i tako prikazem saldo za kupca (stvar internog dizajna).
Ostalo mi je jedino da to dohvatim samo JEDNIM upitom, i podatke o kupcu i sume, dakle da upit daje rezultat tabelu tipa
____________________________________________________________
kupacid, naziv, suma_uplata, suma_vrijednosti_naloga, saldo
ali to mi je izgledalo prekomplikovano. Ne bi bilo lose ako neko zna da postira rjesenje za ovakav upit.



 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Trigger za updateovanje druge tabele priliko unosa vrijednosti07.06.2004. u 01:05 - pre 241 meseci
Code:

DROP VIEW vwSveSkupa
DROP VIEW vwUplate
DROP VIEW vwNalozi
GO

CREATE VIEW vwUplate AS
SELECT Kupci.kupacID, SUM(Uplate.vrijednost) AS Suma_Uplata
FROM Kupci 
     INNER JOIN Uplate
     ON Kupci.kupacID = Uplate.kupacid
GROUP BY
     Kupci.kupacID
GO

CREATE VIEW vwNalozi AS
SELECT Kupci.kupacID, SUM(Nalozi.vrijednost_naloga) AS Suma_naloga
FROM tbl_Kupci
     INNER JOIN Nalozi
     ON Kupci.kupacID = Nalozi.kupacid
GROUP BY
     Kupci.kupacID
GO

CREATE VIEW vwSveSkupa AS
SELECT Kupci.kupacID, Kupci.naziv,
       ISNULL(vwUplate.Suma_uplata, 0) AS Suma_uplata,
       ISNULL(vwNalozi.Suma_naloga, 0) AS Suma_naloga,
       ISNULL(Suma_uplata, 0) - ISNULL(Suma_naloga, 0) AS Saldo
FROM tbl_Kupci
     LEFT OUTER JOIN vwUplate
     ON Kupci.kupacid = vwUplate.kupacid
     LEFT OUTER JOIN vwNalozi
     ON Kupci.kupacid = vwNalozi.kupacid
GO

i onda jedno

SELECT * FROM vwSveSkupa;

Verovatno može i jedan izraz, ali meni uvek lakše postupno, valjda kako ko više voli..


Commercial-Free !!!
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Trigger za updateovanje druge tabele priliko unosa vrijednosti08.06.2004. u 10:04 - pre 241 meseci
Odnosno, moglo bi i ovako (testiraj obavezno), bar ja ne znam za bitno kraći način, a da se ne koriste UDF, što je opet verzija ovog ili onog gore.
Code:

SELECT t.KupacID, t.Ime, 
    ISNULL(t.SumaUplata,0) AS Suma_Uplata,
    ISNULL(SUM(Nalozi.vrijednost_naloga),0) AS Suma_Naloga,
    ISNULL(t.SumaUplata,0)-ISNULL(SUM(Nalozi.vrijednost_naloga),0) AS Saldo
FROM 
(SELECT Kupci.KupacID, Kupci.Ime, SUM(U.vrijednost) AS SumaUplata 
    FROM Kupci 
    LEFT JOIN Uplate U ON Kupci.KupacID = U.KupacID
    GROUP BY Kupci.KupacID, Kupci.Ime) AS t
LEFT JOIN Nalozi ON t.KupacID = Nalozi.KupacID
GROUP BY t.KupacID, t.ime, t.SumaUplata

Tabele u kojima su podaci su sa imenima: Kupci, Uplate, Nalozi.

A može i ovako, a ti sam dodaj ono ISNULL:
Code:

SELECT K.kupacid,K.Ime, 
    (SELECT SUM(vrijednost) FROM Uplate where kupacId=K.kupacId),
    (SELECT SUM(vrijednost_naloga) FROM Nalozi where kupacid=K.kupacid),
    (SELECT SUM(vrijednost) FROM Uplate where kupacid=K.kupacId)-
    (SELECT SUM(vrijednost_naloga) FROM Nalozi where kupacId=K.kupacId)
FROM Kupci AS K

Commercial-Free !!!
 
Odgovor na temu

[es] :: Baze podataka :: Trigger za updateovanje druge tabele priliko unosa vrijednosti

[ Pregleda: 3674 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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