Som de andre også er inde på, så kan du bruge den tabel med ÅR og måneder du skriver, at du har. Siden du i dit eksempel slet ikke bruger ÅR, ville det nok være endnu mere hensigtsmæssigt at oprette en ny tabel kun med månedsnumre. Hvis vi tager udgangspunkt i en sådan månedstabel med 12 rækker, så ville en forespørgsel kunne se sådan ud:
SELECT f.Felt, m.Måned, d.Value FROM dbo.felter AS f CROSS JOIN dbo.måneder AS m LEFT JOIN dbo.data AS d ON d.måned = m.måned AND d.felt=f.felt
Som du kan se, har jeg taget udgangspunkt i, at du også har en tabel med de mulige værdier for feltet Felt. For ellers vil det være svært at få det propageret med til forespørgslen.
Hvis du ikke på forhånd ved, hvilket værdier Felt kan antage, eller du kun vil have de Felt-værdier vist, som dine data rent faktisk indeholder, vil du kunne gøre det sådan:
WITH DataFelter AS ( SELECT DISTINCT Felt FROM dbo.Data)
SELECT f.Felt, m.Måned, d.Value FROM DataFelter AS f CROSS JOIN dbo.måneder AS m LEFT JOIN dbo.data AS d ON d.måned = m.måned AND d.felt=f.felt
Som PlaidDK allerede har vist, vil du på samme måde kunne bruge månederne fra din MånedÅr tabel, hvis du skulle ønske at gå den vej:
WITH DataFelter AS ( SELECT DISTINCT Felt FROM dbo.Data),
Måneder AS ( SELECT DISTINCT Måned FROM dbo.MånedÅr)
SELECT f.Felt, m.Måned, d.Value FROM DataFelter AS f CROSS JOIN Måneder AS m LEFT JOIN dbo.data AS d ON d.måned = m.måned AND d.felt=f.felt
... og siden du gerne vil have vist et 0, når der ikke er data, skal vi lige have konverteret NULL til et 0:
WITH DataFelter AS ( SELECT DISTINCT Felt FROM dbo.Data),
Måneder AS ( SELECT DISTINCT Måned FROM dbo.MånedÅr)
SELECT f.Felt, m.Måned, COALESCE(d.Value, 0) AS Value FROM DataFelter AS f CROSS JOIN Måneder AS m LEFT JOIN dbo.data AS d ON d.måned = m.måned AND d.felt=f.felt
(jeg bruger generelt altid COALESCE som er mere sql-standard, men du kan selvfølgelig også bruge ISNULL funktionen, sådan som plaidDK gør i sit svar - det er en smagssag)
Synes godt om
Slettet bruger
24. juni 2015 - 10:51#6
Det her er rimelig stivt.
Har jeg svaret på mit eget spm jeg har oprettet? HAhaha :D Shit mand :D
Men jeg havde jo egentlig selv løst det, men for din effort og dejlige crossjoin så får du pointene :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.