Hej! Använd SUM och GROUP BY Exakt hur skiljer sig det från det jag skrev? Du kan ju testa:Problem med NULL-värden
    
    
Jag sliter med en SELECT-sats i Access 2003 som summerar en kolumn med tal, men jag vill att vissa av posterna skall subtraheras från summan. Exempel:
Tabellen:
----------------------------------
Nyckel	Param1	Värde
----------------------------------
1	a	24
2	b	35
3	b	18
Önskat resultat med select-satsen:
----------------------------------------------
Param1	Term1	Term2	Diff
----------------------------------------------
a	24	NULL	24
b	35	18	17
Jag har nu följande sql-sats:
SELECT Param1,
(SELECT SUM(Värde) FROM Siffertest AS s2 WHERE s1.Param1 = s2.Param1 AND NOT Nyckel = 3) AS Term1,
(SELECT SUM(Värde) FROM Siffertest AS s2 WHERE s1.Param1 = s2.Param1 AND Nyckel = 3) AS Term2,
(SELECT SUM(Värde) FROM Siffertest AS s2 WHERE s1.Param1 = s2.Param1 AND NOT Nyckel = 3) -
(SELECT SUM(Värde) FROM Siffertest AS s2 WHERE s1.Param1 = s2.Param1 AND Nyckel = 3) AS Diff
FROM Siffertest AS s1
GROUP BY Param1
Resultatet av detta är att de subqueries som inte hittar några poster att summera returnerar NULL, vilket gör att differensen också blir NULL. Det vill säga, för den post där Param1 = 'a' blir differensen (24 - NULL = NULL). Jag vill att de posterna skall behålla sitt originalvärde istället, alltså (24 - 0 = 24).
Hur kan jag göra det?
Några tips?
MVH
Johannes Jonsson
    Sv: Problem med NULL-värden
    
    
alltså:
select param1, sum([värde])
from tabellen
group by param1;
Å en annan sak, ändra column-namnen, ä i tabellen är inte så bra...
/MSv:Problem med NULL-värden
    
    
Jag lyckades iallafall lösa detta med UNION. Dessvärre går inte UNION att använda i subqueries, så jag fick skapa en vy (eller fråga heter det väl i access) enligt följande:
SELECT Param1, SUM(Värde) AS Summa
FROM Siffertest 
WHERE NOT Nyckel = 3
GROUP BY Param1
UNION 
SELECT Param1, -SUM(Värde) AS Summa
FROM Siffertest 
WHERE Nyckel = 3
GROUP BY Param1;
vilket gav följande resultattabell:
Param1	Summa
a	24
b	-18
b	35
och då kunde jag köra ytterligare en fråga på den vyn, som helt enkelt summerade efter Param1 vilket gav resultatet:
Param1	Summa
a	24
b	17
Vilket var vad jag var ute efter. Dock känns lösningen lite otymplig, så om nån har nån mer koncis lösning är den välkommen!
Angående namnet 'värde' så var det rent illustrativt för exemplet, jag använder inte icke-engelska tecken på kolumner m m normalt, även om access ju tyvärr tillåter det...
/JohannesSv: Problem med NULL-värden
    
    
<code>
SELECT Param1, SUM(Värde * (Nyckel = 3)) AS Summa
FROM Siffertest
WHERE Nyckel = 3
GROUP BY Param1; 
</code>
Uttrycket (Nyckel = 3) ger ju värdet 0 om den är falsk och -1 om den är san.