pomocą programu Microsoft SQL Server 2012.Jak dodać odpowiednie kolumny do zestawu danych PIVOT
Mam tabeli:
PartID |TypeSet | Setting | ObservID |TransDate
---------------------------------------------
1 A 456 12 10/20/2015
1 A 377 12 10/20/2015
1 A 425 12 10/20/2015
1 A 665 12 10/20/2015
1 A 543 12 10/20/2015
1 A 554 12 10/20/2015
1 B 34 41 10/21/2015
1 B 27 41 10/21/2015
1 B 27 41 10/21/2015
1 B 29 41 10/21/2015
1 C 1299 12 10/20/2015
1 C 1227 12 10/20/2015
chciałbym wyświetlić go jak poniżej. Pojedynczy wiersz zgrupowany w PartID.
PartID | A Avg | B Avg | C Avg | A ObservID | B ObservID | C ObservID
---------------------------------------------------------------------
1 503 29 1263 12 41 12
Nie mogę uzyskać identyfikatorów ObservID do wyświetlania bez tworzenia wielowierszowego zestawu danych zwrotnych. Nie mam problemu z A, B i C średnia z tego zapytania:
SELECT
PartID
,[A] as 'A Average'
,[B] as 'B Average'
,[C] as 'C Average'
-- ,(ObservID)
--,CASE WHEN [A] = 'A Average' THEN max([ObservID]) END as 'A Ob'
--,CASE WHEN [B] = 'B Average' THEN max([ObservID]) END as 'B Ob'
-- ,CASE WHEN [C] = 'C Average' THEN max([ObservID]) END as 'C Ob'
FROM
(SELECT
PartID
,TypeSet
,Setting
--,ObservID
FROM #Temp1
) as MeasData
PIVOT
(
AVG(Setting)
FOR [TypeSet] in
([A], [B], [C])
) as PivotTable
widać w powyższym zapytaniu gdzie starałem się dostać ObservID w nim, ale kiedy odkomentuj te linie, mogą wystąpić błędy. Niektóre uwagi: Identyfikatory ObservID pozostaną spójne dla każdego zestawu TypeSet.
Oto dane:
create table #Temp1
(
PartID INT
, TypeSet VARCHAR(10)
, Setting INT
, ObservID INT
, TransDate Date
)
INSERT INTO #Temp1(PartID, TypeSet, Setting, ObservID, TransDate) VALUES
(1, 'A', 456, 12, '10/20/2015'),
(1, 'A', 377, 12, '10/20/2015'),
(1, 'A', 425, 12, '10/20/2015'),
(1, 'A', 665, 12, '10/20/2015'),
(1, 'A', 543, 12, '10/20/2015'),
(1, 'A', 554, 12, '10/20/2015'),
(1, 'B', 34, 41, '10/21/2015'),
(1, 'B', 27, 41, '10/21/2015'),
(1, 'B', 27, 41, '10/21/2015'),
(1, 'B', 29, 41, '10/21/2015'),
(1, 'C', 1299, 12, '10/20/2015'),
(1, 'C', 1227, 12, '10/20/2015')
Czy mój sygnał wyjściowy możliwe działania PIVOT? Czy powinienem wybrać trasę dla wielu zestawów JOIN dla każdego zestawu?
To jest wielki. Daje mi to, czego potrzebuję. Moją jedyną troską jest wykonanie, ale jednocześnie nie przejrzałem planów wyjaśniających ... Ale dziękuję za to. – Charlie
@Charlie Powinno to być tak szybkie, jak każde zapytanie używające 'PIVOT'. 'PIVOT' to tak naprawdę cukier syntaktyczny do agregacji warunkowej. –