我有下表:
Customer, Product, Qty
A Red 2
A Green 1
B Red 1
B Green 1
B Yellow 5
C Green 1
D Green 1
我需要显示所有组合,以获得如下报告:
Red and Green
A 3
B 2
Red and Yellow
B 6
Green and Yellow
B 6
Only red
...
Only green
...
Only yellow
在您看来,是否可以在Sql(MySql)中执行? 我不知道从哪里开始..我知道只有它被称为“排列”问题。
由于
答案 0 :(得分:2)
我认为你可以通过自我加入和聚合来做到这一点:
select t1.product, t2.product, t1.customer,
(case when t1.product = t2.product then sum(t1.qty) else sum(t1.qty + t2.qty) end)
from table t1 join
table t2
on t1.customer = t2.customer and
t1.product <= t2.product
group by t1.product, t2.product, t1.customer;
产品相同时的值对应一种产品。
这假设客户和产品表中没有重复项。如果是这样,那么您需要使用子查询预先聚合表。
Here是一个演示它的SQL小提琴。
请注意,输出是具有列和行的典型SQL结果表。它不是问题中的格式,这不是典型SQL查询的结果。
答案 1 :(得分:0)
尝试以下SQL:
select if(t1.Product = t2.Product, concat('Only ', t1.Product), concat(t1.Product, ' and ', t2.Product)) as Combo, t1.Customer, sum(t1.Qty + t2.Qty) as Qty
from [table] t1
inner join [table] t2 on t1.Customer = t2.Customer
where t1.Product <= t2.Product -- to eliminate duplicates
group by t1.Customer, t1.Product, t2.Product;