Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Perbandingan harga produk di sql

Saya rasa inilah yang Anda cari.

SQLFiddle

Agak jelek, tapi di sini ada sedikit gangguan.

Blok ini memungkinkan Anda untuk mendapatkan daftar dinamis dari nilai-nilai Anda. (Tidak ingat dari siapa saya mencuri ini, tapi ini luar biasa. Tanpa ini, pivot benar-benar tidak lebih baik daripada pendekatan pernyataan kasus raksasa besar untuk ini.)

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, '')

Variabel @cols Anda keluar seperti ini:

[Amazon],[eBay],[Sears]

Maka Anda perlu membuat string dari seluruh kueri Anda:

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
'

Tabel turunan piv1 memberi Anda nilai yang diputar. Tabel turunan tt yang diberi nama cerdik memberi Anda penjual yang memiliki penjualan minimum untuk setiap hari. (Sudah kubilang itu agak jelek.)

Dan akhirnya, Anda menjalankan kueri Anda:

execute(@query)

Dan Anda mendapatkan:

 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

(maaf, tidak dapat membuat garis yang sedikit itu).

Menurut saya, jika Anda memiliki alat pelaporan yang dapat melakukan tab silang, ini akan jauh lebih mudah dilakukan di sana.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bagaimana cara mendapatkan tanggal mulai dan akhir semua minggu antara dua tanggal di server SQL?

  2. Hindari 4 Kesalahan Umum DBA Ini

  3. apakah ada keuntungan varchar(500) dibandingkan varchar(8000)?

  4. Nonaktifkan semua indeks yang tidak berkerumun

  5. Dalam SQL, bagaimana Anda bisa mengelompokkan dalam rentang?