Beror på DBMS men
select year(st_date),sum(st_quantity)
from t
group by year(st_date)
fungerar i ett flertal.
11 svar · 239 visningar · startad av Dino
Vill från nedan ta ut det totala st_quantity där st_date har samma år.
st_id st_ar_id st_date st_quantity
10 1 2004-10-23 1
11 2 2004-10-23 6
12 7 2004-10-23 5
13 4 2004-10-23 3
14 6 2004-10-23 46
15 2 2003-10-22 2
16 4 2003-10-21 30
17 4 2002-10-20 9
18 2 2002-10-20 3
Beror på DBMS men
select year(st_date),sum(st_quantity)
from t
group by year(st_date)
fungerar i ett flertal.
Access är det.
Tack, det fungerade. Men om jag vill ha ut samma data där st_date har samma år-månad och samma år-månad-dag hur gör jag då.
select year(st_date),month(st_date),sum(st_quantity)
from t
group by year(st_date),month(st_date)
och
select st_date,sum(st_quantity)
from t
group by st_date
förutsatt att st st_date inte innehåller tid också.
Allting fungerar bra. Och som vanligt, tack så mycket. :)
Fortsättning.
För åren ser sqlen ut så här nu.
SELECT Year([st_date]) AS st_fulldate, Sum([statistics].[st_quantity]) AS st_totalsales
FROM Statistics
WHERE Year([st_date]) Between [@start] And [@end]
GROUP BY Year([st_date]);
Och om jag sätter @start till 2000 och @end till 2004 så vill jag ta ut data för åren därmellan. Men om tex 2002 inte har någon data så kommer inte den med, så hur man för att att den skall skriva ut året oxå och att dess st_quantity är 0. Som nedan.
2000 35
2001 14
2002 0
2003 67
2004 24
SELECT ad AS st_fulldate,
coalesce(Sum([statistics].[st_quantity]),0) AS st_totalsales
FROM (select 2000 as ad union select 2001 union select 2002 union select 2003 union select 2004 ) dt left join Statistics
on dt.ad = year(st_date)
GROUP BY ad
Får felet "Kopplingsuttrycket stöds inte"
SELECT ad AS st_fulldate,
coalesce(Sum([statistics].[st_quantity]),0) AS st_totalsales
FROM (select 2000 as ad union select 2001 union select 2002 union select 2003 union select 2004 ) dt left join Statistics
on [b]dt.ad = year(st_date)[/b]
GROUP BY ad
Och går det inte att komma runt att hårdkoda in årtalen.
Är det access?
I så fall kan du skapa en tabell med en kolumn
create table dt (ad int)
som du fyller med värden från 1900-2100 t.ex. (alla år som är aktuella)
SELECT ad AS st_fulldate,
nvl(Sum([statistics].[st_quantity]),0) AS st_totalsales
FROM dt left join Statistics
on dt.ad = year(st_date)
where dt.ad between 2000 and 2004
GROUP BY ad
Jo, det är fortfarande access.
La till en tabell Years med en year kolumn, men felet är detsamma.
SELECT [year] AS st_fulldate, nz(Sum([statistics].[st_quantity]),0) AS st_totalsales
FROM [Years] left join Statistics
ON [b][Years].[year] = year(st_date)[/b]
WHERE [Years].[year] between 2000 and 2004
GROUP BY [Years].[year]
Sen hade jag ju tänkt att det skulle fungera likadant på år-månad och år-månad-dag. Skulle det innebära att jag skulle behöva lägga till en tabell med år-månader och en för alla år-månader-dagar. Då kanske det är lättare att göra en lösning i serverkoden.
SELECT [year] AS st_fulldate, nz(Sum([statistics].[st_quantity]),0) AS st_totalsales
FROM [Years] left outer join Statistics
ON [Years].[year] = year(st_date)
WHERE [Years].[year] between 2000 and 2004
GROUP BY [Years].[year]
Access brukar vara lite kinky.