Avatar billede Sus25 Nybegynder
26. september 2012 - 12:21 Der er 7 kommentarer og
1 løsning

Find værdier med en forekomst og sum et andet tal

Hej
Sidst fik jeg rigtig god hjælp håber på det igen.
Jeg skal finde bestemte forekomster der er = med et bestemt tal og så skal den summe alle dem med den rigtige forekomst.
Eks:
select srbsol.olprdc, sum(OLCQTY) as "Prisliste" where SRBSOL.OLPCOD = '152'
from MED650CFMT/SRBSOL
        left outer join MED650CFMT/SRBSOH
            on SRBSOL.OLORNO = SRBSOH.OHORNO
    where srbsoh.ohodat >= 20120723 and srbsoh.ohodat <= 20120723

Jeg vil gerne have at den nye kolonne hedder prisliste.

Er der nogen der kan hjælpe :)

TAK
Avatar billede Sus25 Nybegynder
26. september 2012 - 12:22 #1
Der skal lige tilføjes at jeg ikke kan bruge hverken IIF eller IF/THEN men gerne case/when
Avatar billede Sus25 Nybegynder
26. september 2012 - 12:36 #2
Har også prøvet:
select srbsol.olprdc, sum(case when SRBSOL.OLPOCD = '152' then sum(OLCQTY) else 0 end) as "Prisliste"
from MED650CFMT/SRBSOL
        left outer join MED650CFMT/SRBSOH
            on SRBSOL.OLORNO = SRBSOH.OHORNO
    where srbsoh.ohodat >= 20120723 and srbsoh.ohodat <= 20120723
    order by SRBSOL.OLPRDC
26. september 2012 - 13:38 #3
Sus25, det skal jeg lige forstå rigtigt.  Det ser ud til, at du har to tabeller med (mindst) disse felter:

srbsol
olorno, olprdc, olcqty, olpcod

srbsoh
ohorno, ohodat

hvor srbsoh.ohorno svarer til srbsol.olorno

Så vil du have summen af olcqty, med navnet Prisliste, for rækker hvor srbsol.olpcod = 152 og srbsoh.ohodat er mellem 20120723 og 20120723.

Det sidste ser mystisk ud. Det ser ud som datoer, 23 juli 2012, men så er de to datoer ens.  Mener du, at ohdat skal være lig med 20120723, eller er det meningen, at det skal være muligt at indsætte forskellige datoer, såsom ohdat between 20120723 and 20120730?  Jeg antager foreløbigt, at det skal kunne være forskellige datoer.

Så ville jeg foreslå dig at prøve en forespørgsel i denne retning (ikke testet):

SELECT l.olprdc, SUM(l.olcqty) as Prisliste
FROM srbsol as l
JOIN srbsoh as h ON l.olorno = h.ohorno
WHERE l.olpcod = '152' AND h.ohdat BETWEEN 20120723 AND 20120723

Du vil notere dig, at jeg har givet tabellerne aliaser (øgenavne) fordi jeg synes det gør det nemmere at overse.

Afhængig af hvordan tabellerne er opbygget er det muligt du må tilføje  sådan noget som: GROUP BY l.olprdc .  Hvis jeg har forstået dig forkert eller det slet ikke virker, så vis opbygningen af de to tabeller, helst med et par rækker data i hver.
Avatar billede Sus25 Nybegynder
26. september 2012 - 14:35 #4
Hej Christian
Det vil ikke virke for mig da der skal laves forskellige kolonner(summer i forskellige kolonner) udfra hvad der står i feltet olpcod. Det er korrekt forstået det med datoerne at det skal være muligt at skrive et interval
F.eks.
Fiktive data:
Olorno Olprdc olcqty olpcod
10      723    10    152
10      500    20    152
10      300    10    110
20      500    4      110
20      723    5      152
20      300    15    110

Så det jeg gerne have den gør er hvis olpcod er 152 skal den summe alle de øvrige linier, indenfor det ønskede datointerval (ikke vist i eksemplet), med samme olprdc til ny kolonne pris. Se nedenstående:
Ønsket resultat:
Olprdc Prisliste Kontrakt
723    15
500    20        4
300              25

Håber det er forståeligt :)
26. september 2012 - 15:48 #5
Det med Kontrakt kan jeg slet ikke finde noget om der hvor du formulerede problemstillingen.  Så bliver det mere kompliceret end jeg kan klare på stående fod.  Jeg må komme tilbage senere, måske i morgen (hvis der ikke er andre der kommer med en løsning i mellemtiden.)  Men jeg checker lige om jeg har forstået det du nu siger: 

Du søger et resultat med en linje for hver olprcd.  Resultatet skal have tre kolonner, olprdc, prisliste, og kontrakt.  Hvis du søger på 152 (...where olpcod = 152) så skal, for hver olprdc, under prisliste komme summen af olcqty hvor olpcod = 152 og under kontrakt summen af olcqty hvor olpcod er forskellig fra 152.  Alt sammen indenfor dataintervallet.  Hvis i dine fiktive data du også havde haft nogen med olcpod = 133 og med olcpod = 25, for eksempel, så skulle deres olcqty lægges sammen med 110 under kontrakt.  Er det korrekt?

(Hvorfor vælger du sådanne nogen kryptiske tabel og kolonne navne?  Det er til at blive skæv i hovedet over.)
Avatar billede Sus25 Nybegynder
26. september 2012 - 18:34 #6
Hej igen Christian
Olcpod har 5 forskellige muligheder, men tog i ovenstående eks. kun 2 af dem. Der er fastdefineret 5 forskellige tal der skal havne i 5 forskellige kolonner. Så det vil sige alle med 152 (og kun dem) skal havne i kolonne Prisliste og alle dem med 133 (og kun dem) skal havne i kontrakt.

Så det er derfor jeg ledte efter noget hvis og så, men der er som sagt 5 tal ialt.

Håber det er forståeligt :)

PS. navnene er ikke nogen jeg selv har valgt de er foruddefineret i tabellerne. :))
26. september 2012 - 21:41 #7
Jamen så var det en noget mager problemformulering du kom med først.  Det tog tre gange frem og tilbage, før du fik fortalt hvad du havde brug for. 

Det bliver nok noget med subselects.  For hvert orlprdc selecter du summen af olcqty for hver af de fem olpcod's.  Her er et ikke testet forsøg. Fordi du ikke fortalte det har jeg gættet, at de tre andre olpcod's er 111, 112, og 113, og at de skal presenteres under navnene Kolonne3, Kolonne4, og Kolonne5.

SELECT i.Olprdc,
(SELECT SUM(olcqty) FROM srbsol WHERE olpcod = 152 AND olprdc = i.olprdc) Prisliste,
(SELECT SUM(olcqty) FROM srbsol WHERE olpcod = 110 AND olprdc = i.olprdc) Kontrakt,
(SELECT SUM(olcqty) FROM srbsol WHERE olpcod = 111 AND olprdc = i.olprdc) Kolonne3,
(SELECT SUM(olcqty) FROM srbsol WHERE olpcod = 112 AND olprdc = i.olprdc) Kolonne4,
(SELECT SUM(olcqty) FROM srbsol WHERE olpcod = 113 AND olprdc = i.olprdc) Kolonne5
FROM srbsol i
JOIN srbsoh h ON i.olorno = h.ohorno
WHERE h.ordat BETWEEN 20120723 AND 20120723
GROUP BY i.olprdc

Jeg kommer nok til at stoppe her.  Hvis der er flere krav til løsningen som du endnu ikke har fortalt om, så må vi håbe, at en anden kan køre videre.  Jeg tillader mig at oprette dette som et svar.
Avatar billede Sus25 Nybegynder
27. september 2012 - 08:29 #8
Hej Christian
Tak for tid og svar. det ser ud til at være fremgangsmåden, der skal bare justeres lidt på det.
Tak.
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