0
create table Product_Price
    (
      id int,
      dt date,
      SellerName varchar(20),
      Product varchar(10),
      ShippingTime varchar(20),
      Price money
    )

    insert into Product_Price values (1, '2012-01-16','Sears','AA','2 days',32)
    insert into Product_Price values (2, '2012-01-16','Amazon', 'AA','4 days', 40)
    insert into Product_Price values (3, '2012-01-16','eBay','AA','1 days', 27)
    insert into Product_Price values (4, '2012-01-16','Walmart','AA','Same day', 28)
    insert into Product_Price values (5, '2012-01-16','Target', 'AA','3-4 days', 29)
    insert into Product_Price values (6, '2012-01-16','Flipcart','AA',NULL, 30)


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 ([amazon],[ebay]))as bob
) 

我想在输出中再增加 2 列(一列是AmazonShippinTime另一列eBayshippintime)。我怎样才能得到这些?小提琴:http ://sqlfiddle.com/#!3/2210d/1

4

1 回答 1

0

由于您需要以两列为中心并在两列上使用不同的聚合,因此我将使用带有 CASE 表达式的聚合函数来获得结果:

select
  dt, 
  product,
  sum(case when SellerName = 'amazon' then price else 0 end) AmazonPrice,
  max(case when SellerName = 'amazon' then ShippingTime end) AmazonShippingTime,
  sum(case when SellerName = 'ebay' then price else 0 end) ebayPrice,
  max(case when SellerName = 'ebay' then ShippingTime end) ebayShippingTime
from product_price
group by dt, product;

请参阅SQL Fiddle with Demo。这给出了一个结果:

|         DT | PRODUCT | AMAZONPRICE | AMAZONSHIPPINGTIME | EBAYPRICE | EBAYSHIPPINGTIME |
|------------|---------|-------------|--------------------|-----------|------------------|
| 2012-01-16 |      AA |          40 |             4 days |        27 |           1 days |
于 2013-11-12T16:54:11.173 回答