に対応する列を追加する方法:私は以下のようにそれを表示したいと思い私はテーブル持っているMicrosoft SQL Serverの2012</p> <p>を使用してPIVOTデータセット
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
を。 PartIDでグループ化された単一の行。
PartID | A Avg | B Avg | C Avg | A ObservID | B ObservID | C ObservID
---------------------------------------------------------------------
1 503 29 1263 12 41 12
複数行のリターンデータセットを作成せずにObservIDを表示することはできません。私はこのクエリでA、BおよびCの平均に問題が全くない:
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
あなたが、私はそれにObservID取得しようとしましたが、私はこれらの行のコメントを解除するとき、エラーが発生する上記のクエリで見ることができます。 いくつかの注意:ObservIDは各タイプセットに対して一貫しています。ここで
はデータです: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')
PIVOT操作で可能な私の所望の出力はありますか?または、各タイプセットのテーブルに複数のJOINのルートを設定する必要がありますか?
これは素晴らしいです。私に必要なものを手に入れよう。私の唯一の心配はパフォーマンスですが、同時に、私は説明計画を見直していません...しかし、これはありがとうございます。 – Charlie
@Charlieこれは、 'PIVOT'を使っているどんなクエリよりも速くなければなりません。 'PIVOT'は実際には条件付き集約のための構文的砂糖です。 –