Я не уверен, возможно ли это сделать в SQL. Это может быть.
Вот решение, использующее только PHP.
$orders = array(
array(
'month_num' => 1,
'amount' => 4
),
array(
'month_num' => 2,
'amount' => 0
),
array(
'month_num' => 3,
'amount' => 4
)
);
$report = array_combine( range( 1, 12), array_fill( 1, 12, 0));
foreach( $orders as $order)
{
$report[ $order['month_num'] ] = $order['amount'];
}
var_dump( $report);
Вы также можете избежать многомерного массива, если вы используете ключи в качестве номера месяца и значение в качестве количества заказов (как в ответе выше):
$orders = array( 1 => 4, 2 => 0, 3 => 0, 4 => 0);
Тогда вы можете сформировать отчет в одну строку:
$report = array_replace( array_combine( range( 1, 12), array_fill( 1, 12, 0)), $orders);
Демо