2017-10-23 4 views
0

Ich versuche, eine Umgehung für einen Client erstellen, die ich eine Zeilen-zu-Spalten-Pivot-Transformation in SQL benötigen dann auf diese Daten über eine Unterabfrage zugreifen.Wickeln Sie eine Pivot-Transformation in Unterabfrage und alias it

Wir haben eine CTE-basierte Lösung, von der wir denken, dass sie funktionieren würde. Allerdings müssen wir diese Abfrage in eine Shell-Abfrage einfügen, um sie mit der Benutzeroberfläche unseres Systems zu verwenden, und die CTE-Lösung funktioniert nicht.

Wir wissen jedoch, dass, wenn wir auf die Pivot-transformierten Daten über eine verschachtelte Unterabfrage zugreifen könnten, die funktionieren sollte.

Unten finden Sie ein Beispiel für die PIVOT-Umwandlung und versuchen Code für die Unterabfrage/Alias-Lösung, die wir hoffentlich in späteren Joins verwenden können.

-- create the test data 

create table #testData 
(
    PK int, 
    DayID DateTime, 
    ReferenceCategorical VarChar(50), 
    Value numeric 
) 

Insert Into #testData(PK, DayID, ReferenceCategorical, Value) VALUES (1, 
'2017-10-1', 'Red', 1516) 
Insert Into #testData(PK, DayID, ReferenceCategorical, Value)VALUES (2,   
'2017-10-1', 'Blue', 1776) 
Insert Into #testData(PK, DayID, ReferenceCategorical, Value)VALUES (3,  
'2017-10-1','Green', 1733) 
Insert Into #testData(PK, DayID, ReferenceCategorical, Value)VALUES (4, 
'2017-10-2', 'Red', 1439) 
Insert Into #testData(PK, DayID, ReferenceCategorical, Value)VALUES (5, 
'2017-10-2', 'Blue', 1882) 
Insert Into #testData(PK, DayID, ReferenceCategorical, Value)VALUES (6, 
'2017-10-2', 'Green', 1372) 

-- the rows to columns tranformation 

select DayID, [Red] ,[Blue], [Green] 
FROM (select * from #testData) og  
PIVOT( 
max(Value) 
FOR ReferenceCategorical in ([Red] ,[Blue], [Green]) 
) pvt 

Dieser versuchte Code funktioniert nicht, sollte aber anzeigen, was wir zu tun versuchen.

select * from 
(select DayID, [Red] ,[Blue], [Green] 
FROM (select DayID, ReferenceCategorical, Value from #testData) og  
PIVOT( 
max(Value) 
FOR ReferenceCategorical in ([Red] ,[Blue], [Green]) 
) pvt) 

Antwort

1

Es muss nur ein Alias ​​wie AS T

select * from 
(select DayID, [Red] ,[Blue], [Green] 
FROM (select DayID, ReferenceCategorical, Value from #testData) og  
PIVOT( 
max(Value) 
FOR ReferenceCategorical in ([Red] ,[Blue], [Green]) 
) pvt) AS T 
0

Ich denke, man muss nur die gesamte Abfrage alias. Hier ist ein Beispiel dafür, wie Sie die Unterabfrage zurück zum Testdaten anschließen würde, zum Beispiel:

SELECT DISTINCT #testData.dayID as main_query, sub.* 
FROM #testData 
INNER JOIN 
(select DayID, [Red] ,[Blue], [Green] 
FROM (select * from #testData) og  
PIVOT( 
max(Value) 
FOR ReferenceCategorical in ([Red] ,[Blue], [Green]) 
) pvt) sub 
ON #testData.dayID = sub.dayID 

Erhältlich hier: http://rextester.com/RCW4104

Verwandte Themen