sql >> Databasteknik >  >> RDS >> Sqlserver

Produktprisjämförelse i sql

Jag tror att det här är vad du letar efter.

SQLFiddle

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.



  1. Problem med JSON-utgångsaccenter

  2. SQL-funktion returtyp:TABLE vs SETOF-poster

  3. MySQL-sökning med beställda jokertecken och extrahera deras värden

  4. Hur man fyller på information i kolumner för e-post