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)