2012-03-13 9 views
0

私は、総数とサブセットの合計を出力するクエリを作成しようとしています(SQL-Server)。私はサブクエリを使ってこれを行う方法を考えることができますが、それはたくさんの仕事のようです。このクエリを書くより速い方法がありますか?SQL Server - selectにサブセットパラメータを渡す機能?

私は、出力しようとしています何
Table name: orders 


OrderID Date   Type   OrderSize 
1   1/1/2012  Electronics $282.02 
2   1/1/2012  Electronics $1,000.56 
3   1/1/2012  Books   $17.25 
4   1/1/2012  Books   $10.00 

は次のようになります。

Date  ElectronicOrders ElectronicOrderSize BookOrders BookOrderSize 
1/1/2012 2     $1,282.58    2   $27.25 

私は2つの更新クエリ実行し、一時テーブルを作成することができます - 1 WHERE Type = 'Electronics'と1 WHERE Type = 'Books'を。

Rのようないくつかのプログラミング言語で見たことは、変数をサブセット化する機能です。

count(OrderID, Type = 'Electronics) as ElectronicOrders, sum(OrderSize, Type = 'Electronics') as ElectronicOrderSize 

または私はsubqueriesUPDATE queriesで立ち往生しています:私は何かを言うことのために方法はありますか?

+1

これはPIVOTのように見えますが、すべての潜在的なカテゴリを知っているかどうかを知ることは重要です。 –

+0

私はすべてのカテゴリを知っています...私は 'PIVOT'に精通していません...今検索しています。 – mikebmassey

+0

ピボットがうまくいくと思います。 count(*)はカウントするが、カウント(*)とsum(*)は同時に計算することはできない。 – mikebmassey

答えて

3

私は新しいPIVOT構文を私の頭の中で意味をなさないようにしましたが、ピボットテーブルをグループ化してケースステートメントで集計関数を実行することができます。

select [date], sum(case when type = 'Electronics' then (ordersize) else 0 end) AS ElectronicsSum, 
sum(case when type = 'Electronics' then 1 else 0 end) AS ElectronicsCount, 
sum(case when type = 'Books' then (ordersize) else 0 end) AS BooksSum, 
sum(case when type = 'Books' then 1 else 0 end) AS BooksCoumt 
from orders 
group by [date] 

私はそれをテストするまでfiddleものを置きます。アーロン・Bが解決策を掲示して、彼に答えのクレジットを与えたら、私はそれのピボット感を認識していないかもしれません。

+1

+1これはおそらく私がやっただろう。おそらくPIVOT(おそらく2つのPIVOTS?)でよりエレガントな方法がありますが、私はまだ構文をマスターしていません。 –

+0

これは私が必要としていた方法とまったく同じように機能しました。助けてくれてありがとう。 – mikebmassey