2013-02-10 2 views
2

У меня есть таблица, которая выглядит примерно так ...Группировки аналогичных значений в новый оператор отбора

supplier_name status  count 
supplier_a  Unavailable 1 
supplier_a  Refunded  5 
supplier_a  Shipped  10 
supplier_z  Refunded  2 
supplier_z  Shipped  4 

Я знаю точно, какие столбцы я хочу, и я хотел бы использовать значение из первой таблицы, чтобы вернуться значения структурированы как следующие ...

supplier_name unavailable refunded shipped 
supplier_a  1    5   10 
supplier_z  0    2   4 

(примечание: в тех случаях, когда нет никакого значения для определенного столбца должны быть установлены на 0)

это было бы возможно достичь в запрос?

ответ

1

Я думаю, что что-то, как это должно работать:

SELECT Supplier_Name, 
    MAX(CASE WHEN STATUS = 'Unavailable' THEN Count ELSE 0 END) as Unavailable, 
    MAX(CASE WHEN STATUS = 'Refunded' THEN Count ELSE 0 END) as refunded, 
    MAX(CASE WHEN STATUS = 'Shipped' THEN Count ELSE 0 END) as shipped 
FROM YourTable 
GROUP BY Supplier_Name 

А вот SQL Fiddle.

Удачи.

+0

Выглядит очень хорошо –

+0

@ mk_89 - рад, что мы сможем помочь! – sgeddes

1

Попробуйте это:

SELECT 
    supplier_name, 
    SUM(COALESCE(CASE WHEN status = 'unavailable' THEN `count` END, 0)) unavailable, 
    SUM(COALESCE(CASE WHEN status = 'refunded' THEN `count` END, 0)) refunded, 
    SUM(COALESCE(CASE WHEN status = 'shipped' THEN `count` END, 0)) shipped 
FROM tbl 
GROUP BY supplier_name 

SQL FIDDLE DEMO

+0

У меня нет сомнений в том, что это работает, но они сначала отвечают отработанным образом –

+0

@ mk_89 У вас есть несколько строк с текущим статусом для того же поставщика? –

Смежные вопросы