---
title: "Matrisliknande resultat?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/182571-matrisliknande-resultat"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Compusa"
published: "2010-02-25T15:58:04.000Z"
updated: "2010-03-08T20:30:39.000Z"
replies: 5
views: 855
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/182571-matrisliknande-resultat"
---

# Matrisliknande resultat?

## #1 — Compusa, 2010-02-25T15:58Z

Hej :)

Låt säg att jag vill göra en utsökning på antalet timmar som vissa personer har jobbat inom ett visst tidsintervall, säg 2009-01-01 till 2009-12-31..

Resultatet skulle jag vilja presentera grafiskt på följande vis:

Namn.......Jan....Feb....Mars...Dec...Summa
Janne.........5......10.......20......0..........35
Olof...........0........5........8.......3.........16
Summa.......5.......15......28.......3.........51

Låt säga att jag har följande tabeller:
Personer: id, namn
RegistreradTid: id, datum, antal, personId

Finns det något fiffigt sätt att lösa detta på med SQL?

Permalänk: https://www.webforum.nu/p/182571

## #2 — LarsG, 2010-02-25T16:26Z

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

Permalänk: https://www.webforum.nu/p/2226818

## #3 — Compusa, 2010-02-25T18:00Z

Tack för snabbt svar LarsG :)

Har testat och det fungerar bra!

Permalänk: https://www.webforum.nu/p/2226833

## #4 — Compusa, 2010-03-05T14:05Z

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

Permalänk: https://www.webforum.nu/p/2227466

## #5 — LarsG, 2010-03-05T17:25Z

Jag skulle inte försöka göra allt i SQL. Ta fram totala antal timmar per person och gör utskriften per månad i ditt presentationslager.

Permalänk: https://www.webforum.nu/p/2227484

## #6 — Compusa, 2010-03-08T20:30Z

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
```

Permalänk: https://www.webforum.nu/p/2230611

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/182571-matrisliknande-resultat
