Ik denk dat dit is wat je zoekt.
Het is een beetje lelijk, maar hier is een kleine uitsplitsing.
Met dit blok kunt u een dynamische lijst van uw waarden krijgen. (Ik kan me niet herinneren van wie ik dit heb gestolen, maar het is geweldig. Zonder dit is pivot echt niet beter dan een grote gigantische case-statementbenadering hiervoor.)
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, '')
Je @cols-variabele komt er als volgt uit:
[Amazon],[eBay],[Sears]
Dan moet je een string van je hele zoekopdracht maken:
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
'
De van piv1 afgeleide tabel geeft u de gedraaide waarden. De slim genoemde tt-afgeleide tabel geeft je de verkoper die de minimale verkoop voor elke dag heeft. (Ik zei toch dat het een beetje lelijk was.)
En tot slot voert u uw zoekopdracht uit:
execute(@query)
En je krijgt:
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
(sorry, ik kan dat stukje niet op een rij zetten).
Ik zou denken dat als je een rapportagetool hebt die kruistabellen kan maken, dit een stuk eenvoudiger zou zijn om daar te doen.