select name,
sum(case when extract(month from datum) = 1 then
antal else 0 end) as jan,
sum(case when extract(month from datum) = 2 then
antal else 0 end) as feb,
...
from personer
left join registreradTid
on personer.id = registreradTid.personId
and datum between date '2009-01-01' and date '2009-12-31'
group by name
Du kan behöva ändra funktionsanropet extract och datumliteraler beroende på DBMS.
Fortsätter posta i samma tråd och markerar som löst igen om jag får ett bra svar ;)
Låt säga att jag har både ett från-datum och ett till-datum på en tidregistrering, kan jag då smeta ut resultatet?
Exempel: Janne har jobbat tio timmar mellan april och maj och det ger följande resultat (Antal timmar / till-månad - från-månad):
Namn.......Apr....Maj....
Janne.........5......5.......
Så som det är idagsläget så får jag följande resultat:
Namn.......Apr....Maj....
Janne.........10......0.......
Det lutar åt att jag gör så här. Det borde väl kunna fungera?
SUM(CASE
WHEN DATEPART(WEEK, Start) = 11 AND DATEPART(WEEK, [End]) = 11 THEN
-- Använd antal om start och slutdatum är inom samma vecka
antal
WHEN DATEPART(WEEK, Start) = 11 THEN
-- Om olika veckor, dela antal genom två och trunkera på startdatum
antal / 2
WHEN DATEPART(WEEK, [End]) = 11 THEN
-- Om olika veckor, dela antal genom två och addera resten på slutdatum
antal / 2 + antal % 2
ELSE
0
END) AS v11
268 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849