2013-12-04 4 views
0

Приветствует! У меня есть 12 столов, по одному на каждый месяц года:Запрос MySQL на несколько таблиц

January 

+----+-----+ 
| id | sale| 
+----+-----+ 
| 1 | 250 | 
| 3 | 500 | 
| 5 | 200 | 
| 7 | 100 | 
+----+-----+ 

February 

+----+-----+ 
| id | sale| 
+----+-----+ 
| 1 | 350 | 
| 2 | 400 | 
| 3 | 500 | 
| 4 | 800 | 
+----+-----+ 

т.д.

мне нужно сделать запрос, где в результате что-то вроде этого:

Annual Sales 
+----+-----------+-----------+ 
| id | Sales_Jan | Sales_Feb | 
+----+-----------+-----------+ 
| 1 |  250 |  350 | 
| 2 |   0 |  400 | 
| 3 |  500 |  500 | 
| 4 |   0 |  800 | 
| 5 |  200 |   0 | 
| 7 |  100 |   0 | 
+----+-----------+-----------+ 

Где согласование Иды из обеих таблиц не дублируются, а пропущенные идентификаторы из других месяцев отображаются, помещая 0 или любой другой символ, указывающий, что в этом месяце не было продаж из этого идентификатора.

спасибо!

+2

следующий раз сделать таблицу месяцев и ссылаться на них с month_id –

+1

Согласованный! Я не уверен, почему вы сохраняете свои продажи в отдельных таблицах базы данных за каждый месяц, но, как правило, вылетаете перед лицом проектирования объектов и моделирования данных. Продажа - продажа, месяц, в котором он происходит, является атрибутом продажи. Таблицы должны представлять объекты, а не атрибуты. –

+0

Я знаю, это часть инженерного процесса, но мне была передана база данных, и у меня нет разрешения на ее изменение. – user3063952

ответ

3

Вы можете подойти к этому с помощью union all и агрегации:

select id, 
     sum(case when month = 'Jan' then sale else 0 end) as Jan_Sale, 
     sum(case when month = 'Feb' then sale else 0 end) as Feb_Sale, 
     . . . 
     sum(case when month = 'Dec' then sale else 0 end) as Dec_Sale 
from ((select 'Jan' as month, id, sale from January) union all 
     (select 'Feb' as month, id, sale from February) union all 
     . . . 
     (select 'Dec' as month, id, sale from February) 
    ) t 
group by id; 
+0

Ты святой! Большое спасибо! Отсутствует «как» перед t, но я не знаю, должен ли я отредактировать это или вы. Как я понимаю, я новичок. Еще раз большое спасибо. – user3063952

+0

@ пользователь3063952. , , Я использую 'as' для псевдонимов столбцов, но не для псевдонимов таблиц. Это стандарт для Oracle, хотя 'as' обычно является необязательным для большинства движков баз данных. –

+0

Не могли бы вы узнать, как это сделать на Ms-access? Мне сказали, что php связан с MySQL, но будет консольное приложение с Ms-доступом. Заранее спасибо. – user3063952

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