Hallo Tweakers,
Tweede vraag van mij in korte tijd, besef ik me, maar wel van een heel ander kaliber.
Ik optimaliseer een aantal views bij een bedrijf, en ben al een tijdje bezig met het dynamisch maken van views. Waar de kolommen nu hardcoded in de view zijn opgeslagen wil ik dat ze dynamisch opgebouwd worden op basis van de inhoud van een kolom. Pivotten dus, maar dan dynamisch.
Na een aantal revisies heb ik dat inmiddels voor elkaar met de volgende query;
Deze query haalt alle unieke groepen uit de #temp_omzet-tabel en maakt daar kolommen van waar de som in geplaatst wordt. Helaas (en logischerwijs) kan ik echter geen temporary table (#temp_omzet) gebruiken in een view. Ik heb naar derived tables gekeken, maar kom er na veel probeersels nog niet uit.. Kan iemand me een zetje in de goede richting geven?
Tweede vraag van mij in korte tijd, besef ik me, maar wel van een heel ander kaliber.
Ik optimaliseer een aantal views bij een bedrijf, en ben al een tijdje bezig met het dynamisch maken van views. Waar de kolommen nu hardcoded in de view zijn opgeslagen wil ik dat ze dynamisch opgebouwd worden op basis van de inhoud van een kolom. Pivotten dus, maar dan dynamisch.
Na een aantal revisies heb ik dat inmiddels voor elkaar met de volgende query;
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| CREATE TABLE #temp_omzet (OpdrachtNummer INT, Omzetbedrag INT, Groep VARCHAR(32)) INSERT INTO #temp_omzet SELECT OpdrachtNummer, ISNULL(Omzetbedrag,0), Groep FROM dbo.DWHOmzet LEFT OUTER JOIN dbo.PAROmzetGroepen ON dbo.DWHOmzet.OmzetType = dbo.PAROmzetGroepen.OmzetTypeCode --Variabele om query in op te slaan DECLARE @DynamicPivotQuery AS NVARCHAR(MAX) --Variabele om dynamische kolomnamen in op te slaan DECLARE @ColumnName AS NVARCHAR(MAX) --Unieke groepen verzamelen SELECT @ColumnName = ISNULL(@ColumnName +',','') + QUOTENAME(Groep) FROM (SELECT DISTINCT Groep FROM #temp_omzet) AS Groepen --Dynamische query voorbereiden SET @DynamicPivotQuery = N'SELECT Opdrachtnummer, ' + @ColumnName + ' FROM #temp_omzet PIVOT (SUM(omzetbedrag) FOR Groep IN ('+ @ColumnName +')) AS PVTTable' --Voorbereide query uitvoeren EXEC sp_executesql @DynamicPivotQuery |
Deze query haalt alle unieke groepen uit de #temp_omzet-tabel en maakt daar kolommen van waar de som in geplaatst wordt. Helaas (en logischerwijs) kan ik echter geen temporary table (#temp_omzet) gebruiken in een view. Ik heb naar derived tables gekeken, maar kom er na veel probeersels nog niet uit.. Kan iemand me een zetje in de goede richting geven?