0

Ich versuche, ein Ergebnis eines CTE Pivot. Aufgrund der Datenschutzgesetze ich nicht meine Frage stellen kann und Suchresultates aber das Beispiel sieht aus wie die folgende Liste:Dynamic Pivot SQL im Common Table Ausdruck (CTE)

WITH CTE1 
AS (select ....) 
,CTE2 
AS (Select...) 
,CTE3 
as (Select...) 

Unten ist das Ergebnis meiner CTE2:

Dataset1

und ich will das Ergebnis als

PivotDataset

Das Hauptproblem, das ich hier habe, ist das Drehen der Ergebnismenge mit multiple und dynamische Pivot-Spalten zwischen CTE2 und CTE3, da ich die Pivot-Daten in CTE3 verwenden muss. Gibt es eine Lösung, ohne die CTEs in TempTable zu ändern? Jede Hilfe wird geschätzt.

+0

Wie sind diese Spalten dynamisch? Ich verstehe, dass sie auf Typen basieren, aber sind die Typen nicht statisch? – ZLK

+0

Ja, es basiert auf dem Typ, aber ich möchte die Spaltennamen in Pivot nicht hart codieren. Typen werden häufig hinzugefügt und sind nicht statisch. – CuriousKid

+0

Nun, dann müssen Sie entweder das gesamte Ding in dynamisches SQL konvertieren oder erwägen, die Daten nicht zu schwenken und alles, was in Ihrem CTE3 ist, zu verändern. Müssen Sie die Daten pivotieren? Weil ich im Allgemeinen einen solchen Pivot brauche, würde ich mich nur darum kümmern, Daten anzuzeigen und nicht zu manipulieren. – ZLK

Antwort

0

Ich denke, es wird so etwas sein.

Dynamic Pivot: 
DECLARE @query VARCHAR(4000) 
DECLARE @years VARCHAR(2000) 
SELECT @years = STUFF((SELECT DISTINCT'],[' + [factor_label] 
      FROM [TEMP_lacp_factors] 
      ORDER BY '],[' + [factor_label] 
      FOR XML PATH('') 
      ), 1, 2, '') + ']' 
SET @query = 
'SELECT * FROM 
(
    SELECT [date_],[issue_id],[cusip],[Factor_value],[factor_label] 
    FROM [TEMP_lacp_factors] 
)t 
PIVOT (MAX([factor_value]) FOR [factor_label] 
IN ('[email protected]+')) AS pvt' 
EXECUTE (@query) 





Dynamic Pivot and Select Into: 
-- Drop the table; you create it dynamically 
Drop Table tempTable 

--Start creating all objects for Dyanmic Pivot 
DECLARE @query VARCHAR(4000) 
DECLARE @years VARCHAR(2000) 
SELECT @years = STUFF((SELECT DISTINCT'],[' + [factor_label] 
      FROM [TEMP_lacp_factors] 
      ORDER BY '],[' + [factor_label] 
      FOR XML PATH('') 
      ), 1, 2, '') + ']' 
SET @query = 
-- Objects that are created above, are put into the table you are about to create below 
'SELECT * INTO tempTable FROM (SELECT * FROM 
(
    SELECT [date_],[issue_id],[cusip],[Factor_value],[factor_label] 
    FROM [TEMP_lacp_factors] 
)t 
PIVOT (MAX([factor_value]) FOR [factor_label] 
IN ('[email protected]+')) AS pvt) X' 
EXECUTE (@query) 

-- Select everything from the dynamically created table ('tempTable') to see results 
Select * from tempTable 

Ich bin nicht 100% sicher, was Sie tun, also ist es nur eine beste Schätzung.