2013-12-04 7 views
0

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

January 

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

February 

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

т.д.

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

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

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

Мне пришлось применить это для MySQL с ASP, и все было круто, но для консольного приложения я должен сделать это с помощью ms-access, не спрашивайте меня, почему я здесь, как консультант.

MySQL код выглядит так:

select id, 
     sum(case when month = 'Enero' then venta else 0 end) as Venta_Ene, 
     sum(case when month = 'Febrero' then venta else 0 end) as Venta_Feb, 
     sum(case when month = 'Marzo' then venta else 0 end) as Venta_Mar, 
     sum(case when month = 'Abril' then venta else 0 end) as Venta_Abr, 
     sum(case when month = 'Mayo' then venta else 0 end) as Venta_May, 
     sum(case when month = 'Junio' then venta else 0 end) as Venta_Jun, 
     sum(case when month = 'Julio' then venta else 0 end) as Venta_Jul, 
     sum(case when month = 'Agosto' then venta else 0 end) as Venta_Ago, 
     sum(case when month = 'Septiembre' then venta else 0 end) as Venta_Sep, 
     sum(case when month = 'Octubre' then venta else 0 end) as Venta_Oct 
from (
     (select 'Enero' as month, id, venta from ene) union all 
     (select 'Febrero' as month, id, venta from febr) union all 
     (select 'Marzo' as month, id, venta from marz) union all 
     (select 'Abril' as month, id, venta from abri) union all 
     (select 'Mayo' as month, id, venta from mayo) union all 
     (select 'Junio' as month, id, venta from juni) union all 
     (select 'Julio' as month, id, venta from juli) union all 
     (select 'Agosto' as month, id, venta from agos) union all 
     (select 'Septiembre' as month, id, venta from sept) union all  
     (select 'Octubre' as month, id, venta from octu) 
    ) as t 
group by id; 

И это прекрасно работает, то и у меня есть что-то подобное для MS-Access:

select Cliente, 
     sum(iif month = 'Enero', Venta, 0) as Venta_Ene, 
     sum(iif month = 'Febrero', Venta, 0) as Venta_Feb, 
     sum(iif month = 'Marzo', Venta, 0) as Venta_Mar, 
     sum(iif month = 'Abril', Venta, 0) as Venta_Abr, 
     sum(iif month = 'Mayo', Venta, 0) as Venta_May, 
     sum(iif month = 'Junio', Venta, 0) as Venta_Jun, 
     sum(iif month = 'Julio', Venta, 0) as Venta_Jul, 
     sum(iif month = 'Agosto', Venta, 0) as Venta_Ago, 
     sum(iif month = 'Septiembre', Venta, 0) as Venta_Sep, 
     sum(iif month = 'Octubre', Venta, 0) as Venta_Oct 
from (
     (select 'Enero' as month, Cliente, Venta from [Venta Ene 2013]) union all 
     (select 'Febrero' as month, Cliente, Venta from [Venta Feb 2013]) union all 
     (select 'Marzo' as month, Cliente, Venta from [Venta Marzo 2013]) union all 
     (select 'Abril' as month, Cliente, Venta from [Venta Abril 2013]) union all 
     (select 'Mayo' as month, Cliente, Venta from [Venta Mayo 2013]) union all 
     (select 'Junio' as month, Cliente, Venta from [Venta Junio 2013]) union all 
     (select 'Julio' as month, Cliente, Venta from [Venta Julio 2013]) union all 
     (select 'Agosto' as month, Cliente, Venta from [Venta Agosto 2013]) union all 
     (select 'Septiembre' as month, Cliente, Venta from [Venta Sept 2013]) union all  
     (select 'Octubre' as month, Cliente, Venta from [Venta Oct 2013]) 
    ) as t 
group by Cliente; 

Но, есть "JOIN ошибка" , Я читал, что псевдонимы не могут применяться в пределах «от», но тогда я не знаю, как это исправить. Заранее благодарю вас!

+2

'У меня есть 12 столов, по одному на каждый месяц year' => Это не кажется хорошей идеей :) –

+1

Почему, почему у вас есть отдельная таблица за каждый месяц? – Taryn

+0

Это ужасная идея ... Но компания вручила мне эту БД, и они не хотят, чтобы я ее менял. Мне нужно создавать отчеты. – user3063952

ответ

0

Вы можете сохранить свою структуру за один стол в месяц. Хотя никто не рекомендовал бы это.

Сделать запрос таким образом:

select 'Enero' as month, Cliente, Venta from [Venta Ene 2013] union all 
select 'Febrero' as month, Cliente, Venta from [Venta Feb 2013] union all 
select 'Marzo' as month, Cliente, Venta from [Venta Marzo 2013] union all 
    etc.... 
select 'Octubre' as month, Cliente, Venta from [Venta Oct 2013]   

Затем сделать перекрестный запрос, используя этот запрос в качестве основы. Мастер доступа создаст это для вас.

+0

Lovely! Я сохранил запрос и перекрестился с помощником. Большое спасибо. – user3063952

0

Синтаксис MS-Access - настоящий беспорядок. Попробуйте это:

select Cliente, 
    sum(iif month = 'Enero', Venta, 0) as Venta_Ene, 
    sum(iif month = 'Febrero', Venta, 0) as Venta_Feb, 
    sum(iif month = 'Marzo', Venta, 0) as Venta_Mar, 
    sum(iif month = 'Abril', Venta, 0) as Venta_Abr, 
    sum(iif month = 'Mayo', Venta, 0) as Venta_May, 
    sum(iif month = 'Junio', Venta, 0) as Venta_Jun, 
    sum(iif month = 'Julio', Venta, 0) as Venta_Jul, 
    sum(iif month = 'Agosto', Venta, 0) as Venta_Ago, 
    sum(iif month = 'Septiembre', Venta, 0) as Venta_Sep, 
    sum(iif month = 'Octubre', Venta, 0) as Venta_Oct 
from [ 
    (select 'Enero' as month, Cliente, Venta from [Venta Ene 2013]) union all 
    (select 'Febrero' as month, Cliente, Venta from [Venta Feb 2013]) union all 
    (select 'Marzo' as month, Cliente, Venta from [Venta Marzo 2013]) union all 
    (select 'Abril' as month, Cliente, Venta from [Venta Abril 2013]) union all 
    (select 'Mayo' as month, Cliente, Venta from [Venta Mayo 2013]) union all 
    (select 'Junio' as month, Cliente, Venta from [Venta Junio 2013]) union all 
    (select 'Julio' as month, Cliente, Venta from [Venta Julio 2013]) union all 
    (select 'Agosto' as month, Cliente, Venta from [Venta Agosto 2013]) union all 
    (select 'Septiembre' as month, Cliente, Venta from [Venta Sept 2013]) union all  
    (select 'Octubre' as month, Cliente, Venta from [Venta Oct 2013]) 
]. as t 
group by Cliente; 

Я изменил скобки в квадратных скобках и добавил необъяснимую точку в конце. Запрос, который вы добавили, должен работать, если ваша база данных настроена на использование SQL Server Compatible Syntax (ANSI 92). Проверьте эти две ссылки на официальную документацию о том, как это сделать:

+0

Как изменить набор базы данных на SQL Sever Compartible Syntax? – user3063952

+0

Я добавил пару ссылок на вопрос :) –

+0

Спасибо. Я изменил его, и он не работает. Кажется, что [] вокруг имени таблицы вызывает конфликт с []. структура): – user3063952

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