Det er periode 1 til periode 12 (jan-Dec i et givent år).
Jeg fandt en læsning ved at lave en variabel i sum og så tage alle perioder i året hver gang selvom jeg egentlig kun er i februar, men så vil den bare vise tomme kolonner, hvilket er helt fint.
DECLARE @Str NVARCHAR(MAX); DECLARE @Str2 NVARCHAR(MAX); SELECT @Str = STUFF( ( SELECT DISTINCT ','+QUOTENAME(Period) FROM dbo.testPeriods FOR XML PATH('') ), 1, 1, ''); PRINT @Str SET @str2 = N'select * from ( select Period,account,Amount from dbo.testPeriods )x PIVOT ( sum(amount) FOR Period in ('+@Str+') ) as p'; PRINT @Str2; EXEC (@Str2);
Dette er en løsning, som kun tager de perioder med du har. Du kan også indsætte et where filter på din periode, så du kun får det du vil have. Det essentielle er at den kun tager de perioder som du selv angiver i din stuff. Jeg ved ikke om din period er som den står 2018M1 fx eller om det rent faktisk er et dato felt. Jeg har tilladet mig at lave det som en string her i dette eksempel
SET @StrCol = STUFF( ( SELECT DISTINCT -- ',ISNULL('+QUOTENAME(Period)+',0) AS ' +QUOTENAME(Period) ','+QUOTENAME(Period) FROM dbo.testPeriods FOR XML PATH('') ), 1, 1,''); SELECT @Str = STUFF( ( SELECT DISTINCT ',ISNULL('+QUOTENAME(Period)+',0) AS ' +QUOTENAME(Period) --','+QUOTENAME(Period) FROM dbo.testPeriods FOR XML PATH('') ), 1, 1,'');
PRINT @Str PRINT @StrCol
SET @str2 = N'select Account,'+@Str+' from ( select Period,account,Amount from dbo.testPeriods )x PIVOT ( sum(amount) FOR Period in ('+@StrCol+') ) as p'; PRINT @Str2; EXEC (@Str2);
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.