Страницы: 1
RSS
Помогите с запросом в MS Query
 
Добрый день всем-всем-всем!  
2 дня назад открыла для себя в Excel'е возможность импортировать данные из SQL. Для примера взяла базу 1С. И вот уже 2 дня никак не могу соединить запросы через MS Query.  
Текст запроса такой:  
SELECT "_InfoRg1744"."_Period", "_InfoRg1744"."_Fld1745RRef", "_InfoRg1744"."_Fld1746RRef", "_InfoRg1744"."_Fld1749", "_InfoRg1744"."_Fld1750", "_InfoRg1744"."_Fld1751", "_InfoRg1744"."_Fld1762", "_InfoRg1744"."_Fld1763", "_InfoRg1744"."_Fld1765", "_InfoRg1744"."_Fld1764", T2."_Fld1745RRef" ,  T2."_Fld1746RRef", PM1  
FROM marketwork.dbo."_InfoRg1744" "_InfoRg1744"  
INNER JOIN (SELECT Max("T2"."_Period") "PM1", "T2"."_Fld1745RRef" , "T2"."_Fld1746RRef"  
FROM marketwork.dbo."_InfoRg1744" "T2"  
GROUP BY "T2"."_Fld1745RRef", "T2"."_Fld1746RRef")  
ON "PM1" = "_InfoRg1744"."_Period"  
При попытке запустить или сохранить его ругается на "Неправильный синтаксис около ключевого слова ON".  
Пробовала разные варианты (со скобками, без псевдонимов и т.д.) - ну никак не дойдет до меня, в чем тут ошибка. Помогите, пожалуйста.  
P.S.: в 1С есть такая функция "СрезПоследних", вот это я и попробовала реализовать через такой запрос. "_InfoRg1744" - это таблица "Поставщики товаров" с кучей информации о товаре (артикул и наименование товара у поставщика, цена, условия поставки и т.п.). Поле "Period" - это дата записи такой информации. Цель запроса - выбрать последнюю (т.е. самую актуальную) информацию о товаре...
 
упрощенная схема вашего запроса выглядит так  
select "_InfoRg1744"."[...]" , T2."[...]", PM1
from table1 "_InfoRg1744" inner join    
(select max(t2.[..]), "t2"."[]" from table2 "t2")
on "PM1" = "_InfoRg1744".Period  
 
1) не указано в какой таблице PM1  
2) идет связка с формируемой таблицей (она должна иметь отличное имя от t2)  
3) теоретически в связи сначала должно быть поле из первой таблицы  
 
т.е должно быть как то так  
 
select "_InfoRg1744"."[...]" , "T3"."[...]", "T3".PM1
from table1 "_InfoRg1744" inner join    
(select max(t2.[..]), "t2"."[]" from table2 "t2") "T3"
on "_InfoRg1744".Period" = "T3".PM1
 
еще как вариант, создать базу acces - внешние данные - дополниельно - базы данных ODBC - создать ссылку - создать новые подключения к sql базе - к каждой нгужной таблице. Затем в access делать запросы (имхо проще) и либо в экселе создавать источник данных из этой базы, либо экспортировать из акса либо смотреть конструкцию sql и переводить ее на sql ms query.
 
Спасибо, большое. Но вот только я не совсем поняла ваши замечания:  
1. РМ1 - это псевдоним к полю Max("T2"."_Period") во втором запросе. Он как-то неправильно указан?  
2. т.е. мне надо было обязательно задать псевдоним для всего второго запроса?  
 
С Access'ом - попробую. Но мне казалось, что он работает с тем же MS Query...
 
(SELECT Max("T2"."_Period") "PM1", "T2"."_Fld1745RRef" , "T2"."_Fld1746RRef"  
FROM marketwork.dbo."_InfoRg1744" "T2"  
GROUP BY "T2"."_Fld1745RRef", "T2"."_Fld1746RRef")    
должно иметь свой псевдоним например T3 - этот псевдоним должен быть указан в первом selecte и в join  
 
select "_InfoRg1744"."[...]" , "T3"."[...]", "T3"."PM1"
from table1 "_InfoRg1744" inner join  
(select max(t2.[..]) "PM1", "t2"."[]"
from table2 "t2"    
GROUP BY "t2"."...") "T3"  
 
on "_InfoRg1744".Period" = "T3".PM1  
 
в аксе не ms query  
 
#26336#
 
вот ссылка на хороший ресурс по теме  
http://codingcraft.ru/sql_queries.php  
именно по сложным вложенным запросам тут  
http://codingcraft.ru/sql_queries/complex_select.php
 
в вашем случае, если надо на последний день то инструкцию лучше составить так  
select  "T3"."[...]", "T3"."PM1", "_InfoRg1744"."[...]"
from (select max(t2.[..]) "PM1", "t2"."[]"
from table2 "t2"  
GROUP BY "t2"."...") "T3"  
inner join table1 "_InfoRg1744"    
on "T3"."PM1" = "_InfoRg1744".Period"    
 
т.е сначала выбрали макс, а к нему уже притягиваем все соответсвующие данные из другой таблицы.  
 
либо можно использовать вашу конструкцию но изменнить связь с inner на right
 
Спасибище огромное. За ссылки - еще отдельное спасибо! Пошла изучать.
Страницы: 1
Читают тему
Наверх