sql >> Database teknologi >  >> RDS >> Sqlserver

Produktprissammenligning i sql

Jeg tror, ​​det er det, du leder efter.

SQLFiddle

Det er lidt grimt, men her er en lille opdeling.

Denne blok giver dig mulighed for at få en dynamisk liste over dine værdier. (Kan ikke huske, hvem jeg stjal dette fra, men det er fantastisk. Uden dette er pivot virkelig ikke bedre end en stor gigantisk sagsfremstillingstilgang til dette.)

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 ud som sådan:

[Amazon],[eBay],[Sears]

Så skal du bygge en streng af hele din forespørgsel:

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 piv1-afledte tabel giver dig de pivoterede værdier. Den smart navngivne tt-afledte tabel giver dig den sælger, der har minimumssalget for hver dag.(Fortalte dig, at det var noget grimt.)

Og til sidst kører du din forespørgsel:

execute(@query)

Og 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

(beklager, jeg kan ikke få den bit på linje).

Jeg vil tro, at hvis du har et rapporteringsværktøj, der kan lave krydstabeller, ville det være meget nemmere at gøre der.



  1. DELETE LIMIT for flere borde

  2. Find ud af, hvor MySQL er installeret på Mac OS X

  3. Oracle OCI, bindevariabler og forespørgsler som ID IN (1, 2, 3)

  4. Hvad svarer til ST_DWithin (PostGIS - PostgreSQL) til MySQL?