Acho que é isso que você está procurando.
SQLFiddle
É meio feio, mas aqui está um pequeno detalhamento.
Este bloco permite obter uma lista dinâmica de seus valores. (Não me lembro de quem eu roubei isso, mas é incrível. Sem isso, o pivô realmente não é melhor do que uma grande abordagem de declaração de caso gigante para isso.)
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, '')
Sua variável @cols fica assim:
[Amazon],[eBay],[Sears]
Então você precisa construir uma string de toda a sua consulta:
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
'
A tabela derivada piv1 fornece os valores dinâmicos. A tabela derivada de tt inteligentemente nomeada dá a você o vendedor que tem as vendas mínimas para cada dia. (Eu disse que era meio feio.)
E, finalmente, você executa sua consulta:
execute(@query)
E você obtém:
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
(desculpe, não é possível fazer esse bit se alinhar).
Eu acho que se você tiver uma ferramenta de relatório que possa fazer crosstabs, isso seria muito mais fácil de fazer lá.