24. maj 2013 - 09:01Der er
7 kommentarer og 1 løsning
SQL String - Multiple Sum på første resultat
Hej,
Jeg her lidt problemer med en ellers overskuelig SQL streng.
SELECT SalesDoc, Sum(RevenueCleaned) AS CreditNotes FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] WHERE CCOA_Acc = '32050102' AND RevenueCleaned < 0 GROUP BY SalesDoc
Jeg er interesseret i at finde alle SalesDoc var RevenueCLeaned er mindre end 0 og de tilhøre CCOA_Acc '32050102'. Det gør ovenstående streng perfekt.
Nu er jeg interesseret i også at finde al positiv omsætning (det vil sige RevenueCleaned > 0) på de SalesDoc som er opfyldt af den ovenstående string.
Bavarian Nordics vækst blev starten på et DevOps-samarbejde med Novataris for hurtigt at kunne tilpasse IT-organisation til forretningen.
7. december 2023
Slettet bruger
24. maj 2013 - 10:33#1
Måske sådan:
SELECT SalesDoc ,Sum(cse when RevenueCleaned < 0 then RevenueCleaned else 0 end) AS Negativ_total ,Sum(cse when RevenueCleaned > 0 then RevenueCleaned else 0 end) AS Positiv_total FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] WHERE CCOA_Acc = '32050102' GROUP BY SalesDoc
Synes godt om
Slettet bruger
24. maj 2013 - 10:34#2
en lille tryk-fejl:
SELECT SalesDoc ,Sum(case when RevenueCleaned < 0 then RevenueCleaned else 0 end) AS Negativ_total ,Sum(case when RevenueCleaned > 0 then RevenueCleaned else 0 end) AS Positiv_total FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] WHERE CCOA_Acc = '32050102' GROUP BY SalesDoc
Du vil have data for de salesdoc hvor der både er positive og negative RevenueCleaned værdier. Du er ikke interesseret i data fra de salesdoc's hvor der kun er positive eller nul RevenueCleaned værdier og heller ikke interesseret i data fra de salesdoc's hvor der kun er negative eller nul værdier.
Ikke testet, men det lyder som en WHERE clausul i retning af denne:
WHERE salesdoc IN (SELECT salesdoc FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] WHERE RevenueCleaned < 0) AND salesdoc IN(SELECT salesdoc FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] WHERE RevenueCleaned > 0
Dataerne selv ville jeg nok (stadig ikke testet) trække ud med subqueries, såsom:
SELECT a.SalesDoc, (SELECT SUM(RevenueCleaned) FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] WHERE CCOA_Acc = '32050102' AND RevenueCleaned < 0) AS Negativ_total, (SELECT SUM(RevenueCleaned) FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] WHERE CCOA_Acc = '32050102' AND RevenueCleaned > 0) AS Positiv_total FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] AS a WHERE salesdoc IN (SELECT salesdoc FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] WHERE RevenueCleaned < 0) AND salesdoc IN(SELECT salesdoc FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] WHERE RevenueCleaned > 0
Sludder og vrøvl. Her er en, forhåbenligt, forbedret version:
SELECT a.SalesDoc, (SELECT SUM(RevenueCleaned) FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] WHERE CCOA_Acc = '32050102' AND RevenueCleaned < 0 AND SalesDoc = a.SalesDoc) AS Negativ_total, (SELECT SUM(RevenueCleaned) FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] WHERE CCOA_Acc = '32050102' AND RevenueCleaned > 0 AND SalesDoc = a.SalesDoc) AS Positiv_total FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] AS a WHERE salesdoc IN (SELECT salesdoc FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] WHERE RevenueCleaned < 0) AND salesdoc IN(SELECT salesdoc FROM [BASS].[dbo].[tblXSAP_Revenue_Optimized] WHERE RevenueCleaned > 0
Christian_Belgien: tak for et super godt svar. Jeg er faktisk også interesseret i dem der kun er negative, så jeg har ændret lidt på dit svar. Mit fint input hjalp mig helt klart i mål - så ligger du lige et svar?
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.