Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

So sánh giá sản phẩm theo sql

Tôi nghĩ đây là những gì bạn đang tìm kiếm.

SQLFiddle

Nó hơi xấu, nhưng đây là một sự cố nhỏ.

Khối này cho phép bạn có được một danh sách động các giá trị của mình. (Không thể nhớ tôi đã lấy trộm cái này từ ai, nhưng thật tuyệt vời. Nếu không có cái này, pivot thực sự không tốt hơn bất kỳ phương pháp tiếp cận tuyên bố trường hợp khổng lồ nào cho việc này.)

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

Biến @cols của bạn xuất hiện như vậy:

[Amazon],[eBay],[Sears]

Sau đó, bạn cần tạo một chuỗi toàn bộ truy vấn của mình:

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
'

Bảng dẫn xuất piv1 cung cấp cho bạn các giá trị xoay vòng. Bảng dẫn xuất tt được đặt tên khéo léo giúp bạn có được người bán có doanh số bán hàng tối thiểu cho mỗi ngày. (Đã nói với bạn rằng nó khá tệ.)

Và cuối cùng, bạn chạy truy vấn của mình:

execute(@query)

Và bạn nhận được:

 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

(xin lỗi, không thể sắp xếp bit đó thành dòng).

Tôi nghĩ rằng nếu bạn có một công cụ báo cáo có thể thực hiện thao tác lướt qua, thì việc này sẽ dễ dàng hơn rất nhiều để thực hiện ở đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đầu ra cơ sở dữ liệu không mong muốn khi sử dụng INNER JOIN

  2. Thủ tục hoặc hàm mong đợi tham số, không được cung cấp

  3. Cách giảm kích thước của bảng SQL Server đã phát triển do thay đổi kiểu dữ liệu

  4. Cách cài đặt sqlcmd &bcp trên Red Hat

  5. Khắc phục:“Không cho phép câu lệnh BACKUP LOG trong khi mô hình khôi phục là ĐƠN GIẢN” trong SQL Server (và SQL Edge)