Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Сравнение на цените на продуктите в sql

Мисля, че това е, което търсите.

SQLFiddle

Донякъде е грозно, но тук има малка повреда.

Този блок ви позволява да получите динамичен списък с вашите стойности. (Не мога да си спомня от кого го откраднах, но е страхотно. Без това обобщението наистина не е по-добро от голям гигантски подход за изявление на случая.)

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

(съжалявам, не мога да подредя този бит).

Мисля, че ако имате инструмент за отчитане, който може да прави кръстосани таблици, това би било адски много по-лесно да се направи там.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Трябва ли тук да се използват параметри със стойност на таблица?

  2. Използване на клаузата With SQL Server 2008

  3. Мисли за изданията на SQL Server 2019

  4. 2 начина за връщане на всички дефинирани от потребителя функции в база данни на SQL Server

  5. Сума със SQL сървър RollUP - но само последно обобщение?