Loop gennem 3 tabeller-oversættelse fra VBA til Stored procedure
Jeg har 3 tabeller: 1. Hovedtabel der skal løbes igennem og opdateres på grundlag af 2 "sub" - tabeller.
2. Sub-tabel her skal foretages en opsumering på grundlag af et ID fra hoved tabelen, hvis summen er >0 så sættes en boolean til sand. 3. Sub-tabel ditto, men er summen <0 så sættes en boolean til sand.
Hvis boolean er sand sættes felt i hovedtabel til sand.
Jeg forestiller mig at man kunne løbe hovedtabellen igennem og i dette gennemløb hente data fra sub-tabel 1 ala: Select * from SubTabel_1 Where ID=HovedTabel!ID
Så evt. en do while sætning som opsumerer værdier fra denne sub-tabel_1
Når dette gennemløb af subtabel_1 er færdigt så gøres ditto med subtabel_2 Og til sidst opdateres hoved tabelen med resultatet af boolean, der så sættes til falsk ligesom opsumerings variablerne sættes til 0.
Kan du prøve at forklare lidt nærmere, hvad du ønsker.
Du har to sub-tabeller, hvor du ønsker at sette en boolean værdi til true/false i hovedtabellen, afhængig af summering i sub-tabeller?
Er det noget i retnigne af:
UPDATE h SET ChckFeltSub1 = CASE WHEN Sub1.Total > 0 THEN -1 ELSE 0 END FROM Hovedtabel h LEFT JOIN (SELECT ID, Sum(Beløb) AS Total FROM SubTabel1 GROUP BY ID ) Sub1 ON h.ID = Sub1.ID
UPDATE h SET ChckFeltSub2 = CASE WHEN Sub2.Total < 0 THEN -1 ELSE 0 END FROM Hovedtabel h LEFT JOIN (SELECT ID, Sum(Beløb) AS Total FROM SubTabel2 GROUP BY ID ) Sub1 ON h.ID = Sub2.ID
Ovenstående kan nok også komprimeres ned til én Update:
UPDATE h SET ChckFeltSub1 = CASE WHEN Sub1.Total > 0 THEN -1 ELSE 0 END ChckFeltSub2 = CASE WHEN Sub2.Total < 0 THEN -1 ELSE 0 END FROM Hovedtabel h LEFT JOIN (SELECT ID, Sum(Beløb) AS Total FROM SubTabel1 GROUP BY ID ) Sub1 ON h.ID = Sub1.ID LEFT JOIN (SELECT ID, Sum(Beløb) AS Total FROM SubTabel2 GROUP BY ID ) Sub1 ON h.ID = Sub2.ID
UPDATE h SET ChckFeltSub1 = CASE WHEN Sub1.Total > 0 THEN -1 ELSE 0 END ChckFeltSub2 = CASE WHEN Sub2.Total < 0 THEN -1 ELSE 0 END FROM Hovedtabel h LEFT JOIN (SELECT ID, Sum(Beløb) AS Total FROM SubTabel1 GROUP BY ID ) Sub1 ON h.ID = Sub1.ID LEFT JOIN (SELECT ID, Sum(Beløb) AS Total FROM SubTabel2 GROUP BY ID ) Sub1 ON h.ID = Sub2.ID
UPDATE h SET ChckFeltSub1 = CASE WHEN Sub1.Total > 0 THEN -1 ELSE 0 END, ChckFeltSub2 = CASE WHEN Sub2.Total < 0 THEN -1 ELSE 0 END FROM Hovedtabel h LEFT JOIN (SELECT ID, Sum(Beløb) AS Total FROM SubTabel1 GROUP BY ID ) Sub1 ON h.ID = Sub1.ID LEFT JOIN (SELECT ID, Sum(Beløb) AS Total FROM SubTabel2 GROUP BY ID ) Sub1 ON h.ID = Sub2.ID
Tak for dit svar jeg vil lige teste det og se om "den vil" ;-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.