2014-02-07 6 views
-1

Я в следующей таблице:Показать все комбинации, используя MySql запрос

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

неподвижную ли этот формат? Может быть, профсоюз может помочь вам здесь. – DevelopmentIsMyPassion

+0

Возможно, это возможно, но язык программирования намного лучше подходит для задачи. Поэтому, если у вас есть возможность использовать java, C#, C++ или что-то еще, используйте это вместо SQL. –

ответ

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-запроса.

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; 
Смежные вопросы