26. september 2012 - 12:21Der 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.
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
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.
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
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.)
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. :))
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.
Hej Christian Tak for tid og svar. det ser ud til at være fremgangsmåden, der skal bare justeres lidt på det. Tak.
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.