Ich denke, das ist es, wonach Sie suchen.
Es ist irgendwie hässlich, aber hier ist eine kleine Aufschlüsselung.
Dieser Block ermöglicht es Ihnen, eine dynamische Liste Ihrer Werte zu erhalten. (Kann mich nicht erinnern, von wem ich das gestohlen habe, aber es ist großartig. Ohne das ist Pivot wirklich nicht besser als ein Ansatz mit großen Fallbeispielen.)
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, '')
Ihre @cols-Variable sieht folgendermaßen aus:
[Amazon],[eBay],[Sears]
Dann müssen Sie eine Zeichenfolge Ihrer gesamten Abfrage erstellen:
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
'
Die abgeleitete Tabelle piv1 liefert Ihnen die Pivot-Werte. Die clever benannte abgeleitete Tabelle tt gibt Ihnen den Verkäufer mit den Mindestumsätzen für jeden Tag. (Ich sagte Ihnen, es sei ziemlich hässlich.)
Und schließlich führen Sie Ihre Abfrage aus:
execute(@query)
Und Sie erhalten:
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
(Entschuldigung, kann diese Bitzeile nicht erstellen).
Ich denke, wenn Sie ein Reporting-Tool haben, das Kreuztabellen erstellen kann, wäre dies dort viel einfacher.