[英]SQL PIVOT without aggregate columns
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
由於您需要在兩列上旋轉並在兩列上使用不同的聚合,因此我將使用帶有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 。 結果如下:
| DT | PRODUCT | AMAZONPRICE | AMAZONSHIPPINGTIME | EBAYPRICE | EBAYSHIPPINGTIME |
|------------|---------|-------------|--------------------|-----------|------------------|
| 2012-01-16 | AA | 40 | 4 days | 27 | 1 days |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.