2

Excel でより簡単に操作できるビューにテーブルをピボットしようとしています。Excel で統計情報やその他のクロステーブル ピボットを作成するために、会計部門が読み取ることができるビューを Sql Server で作成しています。

現在の形式のテーブル

職業ID | 製品 ID | グループです | 追加の夜です | 価格
--------------+-----------+---------+-------------- ---+------
1 | 47 | 0 | 0 | 50
2 | 47 | 0 | 1 | 45
3 | 47 | 1 | 0 | 30
4 | 47 | 1 | 1 | 28

公開したいビュー形式

製品 ID | 価格 | 追加の夜 | グループ料金 | グループ追加宿泊
----------+-------+-----------------+------------+ ----------------------
47 | 50 | 45 | 30 | 28

Sql Server 2008 R2 でそれを達成するにはどうすればよいですか? より大きなクエリ (CTE を使用) の一部になるため、クエリを高速にする必要があります。

現在、私が考えている唯一の方法は、4 つのサブクエリを含めて 4 つの価格すべてを個別に取得することですが、このアプローチは気に入らず、テーブルを 4 回スキャンします。

4

1 に答える 1

3
SELECT ProductId,
MAX(CASE 
 WHEN IsGroup=0 AND IsAdditionalNight =0 then Price
 END) as [Price],
MAX(CASE 
 WHEN IsGroup=0 AND IsAdditionalNight =1 then Price
 END) as [AdditionalNight],
MAX(CASE 
 WHEN IsGroup=1 AND IsAdditionalNight =0 then Price
 END) as [GroupPrice],
MAX(CASE 
 WHEN IsGroup=1 AND IsAdditionalNight =1 then Price
 END) as [GroupAdditionalNight] 

 FROM table1     
GROUP BY ProductId

または、を使用して同じことを行うこともできますPIVOT(個人的には、PIVOT上記のアプローチよりも複雑な構文を見つけましたが、パフォーマンスの違いはなく、好む人もいPIVOTます)。

于 2012-09-17T14:37:04.917 に答える