これがあなたが探しているものだと思います。
ややこしいですが、ここで少し内訳を示します。
このブロックを使用すると、値の動的リストを取得できます。 (誰からこれを盗んだのか思い出せませんが、素晴らしいです。これがなければ、ピボットは、これに対する巨大なケース ステートメント アプローチよりも優れているとは言えません。)
DECLARE @cols AS VARCHAR(MAX)
DECLARE @query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' +
QUOTENAME(SellerName)
FROM Product_Price
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '')
@cols 変数は次のようになります:
[Amazon],[eBay],[Sears]
次に、クエリ全体の文字列を作成する必要があります:
select @query =
'select piv1.*, tt.sellername from (
select *
from
(select dt, product, SellerName, sum(price) as price from product_price group by dt, product, SellerName) t1
pivot (sum(price) for SellerName in (' + @cols + '))as bob
) piv1
inner join
(select t2.dt,t2.sellername,t1.min_price from
(select dt, min(price) as min_price from product_price group by dt) t1
inner join (select dt,sellername, sum(price) as price from product_price group by dt,sellername) t2 on t1.min_price = t2.price) tt
on piv1.dt = tt.dt
'
piv1 派生テーブルは、ピボットされた値を取得します。巧妙に名付けられた tt 派生テーブルは、毎日の売上が最小の販売者を取得します (ちょっと醜いと言っていましたが)。
最後に、クエリを実行します:
execute(@query)
そして、あなたは得る:
DT PRODUCT AMAZON EBAY SEARS SELLERNAME
2012-01-16 AA 40 27 32 eBay
2012-01-17 BC 30 51.4 33.2 Amazon
2012-01-18 DE 11.1 9.4 13.5 eBay
(申し訳ありませんが、そのビットを並べることはできません)。
クロス集計を実行できるレポート ツールがあれば、はるかに簡単に実行できると思います.