webForumDet fria alternativet

sumera lite

11 svar · 239 visningar · startad av Dino

DinoMedlem sedan sep. 20011 918 inlägg
#1

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

LarsGMedlem sedan dec. 200012 465 inlägg
#2

Beror på DBMS men

select year(st_date),sum(st_quantity) 
from t
group by year(st_date)

fungerar i ett flertal.

DinoMedlem sedan sep. 20011 918 inlägg
#3

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å.

LarsGMedlem sedan dec. 200012 465 inlägg
#4
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å.

DinoMedlem sedan sep. 20011 918 inlägg
#5

Allting fungerar bra. Och som vanligt, tack så mycket. :)

DinoMedlem sedan sep. 20011 918 inlägg
#6

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
LarsGMedlem sedan dec. 200012 465 inlägg
#7
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
DinoMedlem sedan sep. 20011 918 inlägg
#8

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.

LarsGMedlem sedan dec. 200012 465 inlägg
#9

Ä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
DinoMedlem sedan sep. 20011 918 inlägg
#10

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.

LarsGMedlem sedan dec. 200012 465 inlägg
#11
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.

DinoMedlem sedan sep. 20011 918 inlägg
#12

Den klagar fortfarande. Har fått tänka om lite och sköter istället detta jobbet genom asp.net.
Tack iaf för hjälpen. :)

131 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
128 ms — hämta tråd, inlägg och bilagor (db)