Переносимый способ поворота:
select item, 'Customer_Order' Category,
COUNT(case when Date='2011-01-24' then 1 else 0 end) as `2010-01-24`,
COUNT(case when Date='2011-01-25' then 1 else 0 end) as `2010-01-25`,
COUNT(case when Date='2011-01-26' then 1 else 0 end) as `2010-01-26`
from customer_order
GROUP BY item
union all
select item, 'Planned_Order' Category,
COUNT(case when Date='2011-01-24' then 1 else 0 end) as `2010-01-24`,
COUNT(case when Date='2011-01-25' then 1 else 0 end) as `2010-01-25`,
COUNT(case when Date='2011-01-26' then 1 else 0 end) as `2010-01-26`
from planned_order
GROUP BY item
ORDER BY item, Category
Проблема в том, что вам нужно знать все даты, которые вы хотите отобразить заранее.Единственная СУБД (я знаю) для поддержки динамического списка столбцов - это Oracle.Другие СУБД потребуют, чтобы вы генерировали динамический SQL для создания операторов CASE, по одному для каждой отдельной встреченной даты.
Единственная непереносимая часть состоит в том, что из-за использования дат в качестве имен полей вам необходимо
`2010-01-24` backticks here for MySQL
"2010-01-24" or [2010-01-24] for SQL Server
"2010-01-24" for Oracle
etc