Мисля, че това е, което търсите.
Донякъде е грозно, но тук има малка повреда.
Този блок ви позволява да получите динамичен списък с вашите стойности. (Не мога да си спомня от кого го откраднах, но е страхотно. Без това обобщението наистина не е по-добро от голям гигантски подход за изявление на случая.)
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
(съжалявам, не мога да подредя този бит).
Мисля, че ако имате инструмент за отчитане, който може да прави кръстосани таблици, това би било адски много по-лесно да се направи там.