[SQL] Workaround voor temporary table in dynamische view

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Torrentus
  • Registratie: April 2009
  • Laatst online: 20:18
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;
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? :)

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Dit gaat niet, tenzij er iets veranderd is kunnen views en table valued functions geen dynamische kolommen hebben. Dat kan alleen bij een stored procedure. Om de temporary table zou je op zich wel heen kunnen werken, om de dynamische kolommen niet.

[ Voor 22% gewijzigd door pedorus op 12-12-2014 15:53 ]

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 23:36

JaQ

@TS: wat is je achterliggende vraag? Waarom wil je een "dynamische" view maken?

Egoist: A person of low taste, more interested in themselves than in me