Sử dụng Microsoft SQL Server 2012.Làm thế nào để thêm các cột tương ứng với một tập dữ liệu PIVOT
Tôi có một bảng:
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
Tôi muốn hiển thị nó như sau. Một hàng được nhóm trên PartID.
PartID | A Avg | B Avg | C Avg | A ObservID | B ObservID | C ObservID
---------------------------------------------------------------------
1 503 29 1263 12 41 12
Tôi không thể hiển thị ObservID để tạo bộ dữ liệu trả về nhiều hàng. Tôi không có vấn đề với A, B và C trung bình với truy vấn này:
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
Bạn có thể nhìn thấy trong các truy vấn trên, nơi tôi đã cố gắng để có được ObservID trong nó, nhưng khi tôi bỏ ghi chú những dòng này, lỗi xảy ra. Một số lưu ý: Các ObservID sẽ luôn phù hợp với từng TypeSet.
Dưới đây là các dữ liệu:
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')
là đầu ra mong muốn của tôi càng tốt với những hoạt động PIVOT? Hoặc tôi nên đi các tuyến đường của nhiều JOINs trên bàn cho mỗi Typeset?
này là rất tốt. Cho tôi những gì tôi cần. Mối quan tâm duy nhất của tôi là hiệu suất nhưng đồng thời, tôi đã không xem xét các kế hoạch giải thích ... Nhưng cảm ơn bạn vì điều này. – Charlie
@Charlie Điều này phải nhanh như bất kỳ truy vấn nào sử dụng 'PIVOT'. 'PIVOT' thực sự là cú pháp đường cho tập hợp có điều kiện. –