Jag tror att det här är vad du letar efter.
Det är lite fult, men här är en liten uppdelning.
Detta block låter dig få en dynamisk lista över dina värden. (Kommer inte ihåg vem jag stal det här från, men det är häftigt. Utan detta är pivot verkligen inte bättre än en stor gigantisk fallbeskrivning till det här.)
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, '')
Din @cols-variabel kommer ut så här:
[Amazon],[eBay],[Sears]
Sedan måste du bygga en sträng av hela din fråga:
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
'
Den härledda piv1-tabellen ger dig de pivoterade värdena. Den smart namngivna tt-härledda tabellen ger dig säljaren som har den lägsta försäljningen för varje dag.(Sa att det var lite fult.)
Och slutligen kör du din fråga:
execute(@query)
Och du får:
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
(förlåt, kan inte få den biten att rada upp).
Jag skulle tro att om du har ett rapporteringsverktyg som kan göra korstabeller, skulle detta vara mycket lättare att göra där.