Avatar billede websphere Nybegynder
23. februar 2005 - 10:26 Der er 18 kommentarer og
1 løsning

Sum kolonne

Hej,

Jeg har en lager transaktionstabel (tilgang / afgang)

Nu vil jeg gerne lave et view der viser summen hver gang der er lavet en tilgang eller afgang - dvs.

IOid  VareNr.  LokationNr.    Antal    (Sum)
  1      10          20          250    (250)
  2      10          20          50    (300)
  3      10          20        -200    (100)
  4      10          20          250    (350)
  5      10          20          -50    (300)

noget i denne stil.

Man hvordan laver jeg nemmest sådan en kolonne?

Morten
Avatar billede websphere Nybegynder
23. februar 2005 - 10:27 #1
Tabellen var flottere da jeg lavede den :-)
Avatar billede arne_v Ekspert
23. februar 2005 - 10:30 #2
Med det brugernavn burde du da køre DB2 !

:-)

Nå spøg til side.

Skud fra hoftet (læs: utestet):

SELECT IOid,varnenr,lokationnr,antal,(SELECT SUM(kopi.antal) FROM tabel kopi WHERE kopi.IOid <= original.IOid)
FROM tabel original
ORDER BY IOid ASC
Avatar billede websphere Nybegynder
23. februar 2005 - 10:36 #3
Brugte jeg også da jeg var "prof" men nu er jeg "bare" studerende, og så må jeg jo nøjes :-)

Tester lige
Avatar billede websphere Nybegynder
23. februar 2005 - 11:00 #4
Skal så have to tabeller? original og kopi eller
Avatar billede arne_v Ekspert
23. februar 2005 - 11:03 #5
Nej samme tabel to gange bare med forskellig alias.
Avatar billede websphere Nybegynder
23. februar 2005 - 11:20 #6
Jeg syntes ikke det virker - Jeg får nogle underlige tal i min sum kolonne.
Avatar billede websphere Nybegynder
23. februar 2005 - 11:22 #7
Sådan her ser min SQL kode ud:

SELECT    IOID, ItemID, IOQuantity,
  (SELECT    SUM(dbo.wm_InOut_v.IOQuantity)
    FROM          dbo.wm_InOut_v
    WHERE      dbo.wm_InOut_v.IOID <= dbo.InOut.IOID) AS [Sum]
FROM        dbo.InOut
WHERE    (ItemID = '44')
Avatar billede arne_v Ekspert
23. februar 2005 - 11:25 #8
SELECT    IOID, ItemID, IOQuantity,
  (SELECT    SUM(kopi.IOQuantity)
    FROM          dbo.InOut kopi
    WHERE      kopi.IOID <= original.IOID) AS Sum
FROM        dbo.InOut original
WHERE    (ItemID = '44')
Avatar billede websphere Nybegynder
23. februar 2005 - 11:31 #9
Det virker :-) Men kun så længe der ikke er andre vare i tabellen :-(
Avatar billede websphere Nybegynder
23. februar 2005 - 11:33 #10
Nåh ja :-)

SELECT    IOID, ItemID, IOQuantity,
  (SELECT    SUM(kopi.IOQuantity)
    FROM          dbo.InOut kopi
    WHERE      kopi.IOID <= original.IOID AND kopi.ItemID = '44') AS Sum
FROM        dbo.InOut original
WHERE    (ItemID = '44')
Avatar billede websphere Nybegynder
23. februar 2005 - 11:38 #11
Tak for hjælpen, det ser ud til at virke nu, så skal jeg bare have bygget det sammen med min application.
Smider du ikke lige et svar så du kan få dine points.
Avatar billede arne_v Ekspert
23. februar 2005 - 11:48 #12
kommer her
Avatar billede websphere Nybegynder
23. februar 2005 - 16:30 #13
Arne, er det muligt at få vist antals kolonnen i to kolonner, så tilgang vises i en og afgang i en anden?

(Skal jeg oprette et nyt spørgsmål?)
Avatar billede arne_v Ekspert
23. februar 2005 - 16:43 #14
Vi kan sagtens tage den her
Avatar billede arne_v Ekspert
23. februar 2005 - 16:46 #15
SELECT ...,
afgang = CASE
  WHEN antal < 0 THEN -antal
  ELSE 0
END,
filgang = CASE
  WHEN antal > 0 THEN antal
  ELSE 0
END
FROM ...
Avatar billede arne_v Ekspert
23. februar 2005 - 16:46 #16
tilgang
Avatar billede websphere Nybegynder
23. februar 2005 - 17:31 #17
Det virker bare - kanon.
Men kan man på en eller anden måde gøre så der ikke står noget i det "tomme felt" nu står der et 0...

Kan jeg caste det til en anden type og lade det være blankt eller?
Avatar billede arne_v Ekspert
23. februar 2005 - 17:36 #18
Prøv:

SELECT ...,
afgang = CASE
  WHEN antal < 0 THEN str(-antal)
  ELSE ''
END,
tilgang = CASE
  WHEN antal > 0 THEN str(antal)
  ELSE ''
END
FROM ...

men hvis query skal læses af et program ville jeg ikke gøre det.
Avatar billede websphere Nybegynder
23. februar 2005 - 18:02 #19
Ok - jeg dropper det - mange tak for hjælpen
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester