Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Запрос из Microsoft Query из нескольких источников - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Запрос из Microsoft Query из нескольких источников (Формулы/Formulas)
Запрос из Microsoft Query из нескольких источников
makc1985 Дата: Пятница, 08.08.2014, 05:48 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Здравствуйте!Помогите пожалуйста в Query не силен! Я создал запрос, который выдергивает данные из нескольких таблиц Помещения, Договоры, Объекты
То есть в таблице помещения заводятся данные о построенных помещениях, в таблице договоры заносятся договоры на эти помещения. В запросе эти все три таблицы связаны между собой
Но такая проблема, если занес помещения новые, но по ним пока нет договоров, то и соответственно в таблице договоры этих помещений нет, в итоге и в запрос они не попадают, а мне надо, чтобы все помещения попали в запрос! Как это сделать? В acesse это делается инструкциями JOIN (INNER, RIGHT, LEFT) а здесь в excele синтаксис какой то другой.
Запрос получился такой
[vba]
Код

SELECT `Помещения$`.`Строительный проект`, `Помещения$`.`Строительный объект`, `Помещения$`.`Номер помещения`, `Договоры$`.Контрагент, `Договоры$`.Консультант, `Договоры$`.`Дата договора`, `Помещения$`.`Фактическая площадь`, `Договоры$`.`Сумма договора`, `Помещения$`.`Платеж 1`, `Помещения$`.`Платеж 2`, `Помещения$`.`Платеж 3`, `Помещения$`.`Платеж 4`, `Помещения$`.`Платеж 5`, `Помещения$`.`Платеж 6`, `Помещения$`.`Платеж 7`, `Помещения$`.`Платеж 8`, `Помещения$`.`Платеж 9`
FROM `C:\Информационное поле\Договоры.xlsx`.`Договоры$` `Договоры$`, `C:\Информационное поле\Объекты.xlsx`.`Объекты$` `Объекты$`, `C:\Информационное поле\Помещения.xlsx`.`Помещения$` `Помещения$`
WHERE `Договоры$`.`Строительный проект` = `Помещения$`.`Строительный проект` AND `Договоры$`.Объект = `Помещения$`.`Строительный объект` AND `Договоры$`.Помещение = `Помещения$`.`Номер помещения` AND `Объекты$`.`Строительный проект` = `Помещения$`.`Строительный проект` AND `Объекты$`.`Строительный объект` = `Помещения$`.`Строительный объект`
ORDER BY `Помещения$`.`Строительный проект`  
[/vba]
 
Ответить
СообщениеЗдравствуйте!Помогите пожалуйста в Query не силен! Я создал запрос, который выдергивает данные из нескольких таблиц Помещения, Договоры, Объекты
То есть в таблице помещения заводятся данные о построенных помещениях, в таблице договоры заносятся договоры на эти помещения. В запросе эти все три таблицы связаны между собой
Но такая проблема, если занес помещения новые, но по ним пока нет договоров, то и соответственно в таблице договоры этих помещений нет, в итоге и в запрос они не попадают, а мне надо, чтобы все помещения попали в запрос! Как это сделать? В acesse это делается инструкциями JOIN (INNER, RIGHT, LEFT) а здесь в excele синтаксис какой то другой.
Запрос получился такой
[vba]
Код

SELECT `Помещения$`.`Строительный проект`, `Помещения$`.`Строительный объект`, `Помещения$`.`Номер помещения`, `Договоры$`.Контрагент, `Договоры$`.Консультант, `Договоры$`.`Дата договора`, `Помещения$`.`Фактическая площадь`, `Договоры$`.`Сумма договора`, `Помещения$`.`Платеж 1`, `Помещения$`.`Платеж 2`, `Помещения$`.`Платеж 3`, `Помещения$`.`Платеж 4`, `Помещения$`.`Платеж 5`, `Помещения$`.`Платеж 6`, `Помещения$`.`Платеж 7`, `Помещения$`.`Платеж 8`, `Помещения$`.`Платеж 9`
FROM `C:\Информационное поле\Договоры.xlsx`.`Договоры$` `Договоры$`, `C:\Информационное поле\Объекты.xlsx`.`Объекты$` `Объекты$`, `C:\Информационное поле\Помещения.xlsx`.`Помещения$` `Помещения$`
WHERE `Договоры$`.`Строительный проект` = `Помещения$`.`Строительный проект` AND `Договоры$`.Объект = `Помещения$`.`Строительный объект` AND `Договоры$`.Помещение = `Помещения$`.`Номер помещения` AND `Объекты$`.`Строительный проект` = `Помещения$`.`Строительный проект` AND `Объекты$`.`Строительный объект` = `Помещения$`.`Строительный объект`
ORDER BY `Помещения$`.`Строительный проект`  
[/vba]

Автор - makc1985
Дата добавления - 08.08.2014 в 05:48
Pelena Дата: Пятница, 08.08.2014, 09:48 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16051
Репутация: 3488 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Приложите небольшой файл с примером

Возможно, Вас заинтересует эта тема или эта
Здесь ещё посмотрите и здесь


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеПриложите небольшой файл с примером

Возможно, Вас заинтересует эта тема или эта
Здесь ещё посмотрите и здесь

Автор - Pelena
Дата добавления - 08.08.2014 в 09:48
Gustav Дата: Пятница, 08.08.2014, 10:33 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1789
Репутация: 711 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
В acesse это делается инструкциями JOIN (INNER, RIGHT, LEFT) а здесь в excele синтаксис какой то другой.

Точно так же всё делается.
Только пишется ручками, а не мышкой, потому что графически MS Query не умеет такие запросы отображать (не дорос он, понимаешь, до Access'а). ниже выяснили, что умеет
Так что жмете пиктограмму SQL и редактируете свой запрос. В качестве примера прикладываю файл с двумя таблицами и текст запроса с LEFT JOIN:

[vba]
Код
SELECT a.F1, a.F2, b.F3
FROM Табл1 a LEFT JOIN Табл2 b
ON a.F1 = b.F1
[/vba]

P.S. Сейчас и Вам напишем. Первым делом придадим запросу более удобоваримый вид, разделив на просматриваемые логические части:
[vba]
Код
SELECT     
`Помещения$`.`Строительный проект`,     
`Помещения$`.`Строительный объект`,     
`Помещения$`.`Номер помещения`,     
`Договоры$`.Контрагент,     
`Договоры$`.Консультант,     
`Договоры$`.`Дата договора`,     
`Помещения$`.`Фактическая площадь`,     
`Договоры$`.`Сумма договора`,     
`Помещения$`.`Платеж 1`,     
`Помещения$`.`Платеж 2`,     
`Помещения$`.`Платеж 3`,     
`Помещения$`.`Платеж 4`,     
`Помещения$`.`Платеж 5`,     
`Помещения$`.`Платеж 6`,     
`Помещения$`.`Платеж 7`,     
`Помещения$`.`Платеж 8`,     
`Помещения$`.`Платеж 9`
FROM     
`C:\Информационное поле\Договоры.xlsx`.`Договоры$` `Договоры$`,     
`C:\Информационное поле\Объекты.xlsx`.`Объекты$` `Объекты$`,     
`C:\Информационное поле\Помещения.xlsx`.`Помещения$` `Помещения$`
WHERE `Договоры$`.`Строительный проект` = `Помещения$`.`Строительный проект`     
      AND `Договоры$`.Объект = `Помещения$`.`Строительный объект`     
      AND `Договоры$`.Помещение = `Помещения$`.`Номер помещения`     
      AND `Объекты$`.`Строительный проект` = `Помещения$`.`Строительный проект`     
      AND `Объекты$`.`Строительный объект` = `Помещения$`.`Строительный объект`
ORDER BY `Помещения$`.`Строительный проект`
[/vba]
Чтобы было еще веселее, введем однобуквенные псевдонимы для таблиц - латинские p, d, o:
[vba]
Код
SELECT     
p.`Строительный проект`,     
p.`Строительный объект`,     
p.`Номер помещения`,     
d.Контрагент,     
d.Консультант,     
d.`Дата договора`,     
p.`Фактическая площадь`,     
d.`Сумма договора`,     
p.`Платеж 1`,     
p.`Платеж 2`,     
p.`Платеж 3`,     
p.`Платеж 4`,     
p.`Платеж 5`,     
p.`Платеж 6`,     
p.`Платеж 7`,     
p.`Платеж 8`,     
p.`Платеж 9`
FROM     
`C:\Информационное поле\Договоры.xlsx`.`Договоры$` d,     
`C:\Информационное поле\Объекты.xlsx`.`Объекты$` o,     
`C:\Информационное поле\Помещения.xlsx`.`Помещения$` p
WHERE d.`Строительный проект` = p.`Строительный проект`     
      AND d.Объект = p.`Строительный объект`     
      AND d.Помещение = p.`Номер помещения`     
      AND o.`Строительный проект` = p.`Строительный проект`     
      AND o.`Строительный объект` = p.`Строительный объект`
ORDER BY p.`Строительный проект`
[/vba]
Обратите внимание, сколько хлопот доставляют пробелы в наименованиях полей. Лучше их избегать для подобных задач.

Окончательно получаем нечто следующее (после некоторой перегруппировки предложений):
[vba]
Код
SELECT   
p.`Строительный проект`,   
p.`Строительный объект`,   
p.`Номер помещения`,   
d.Контрагент,   
d.Консультант,   
d.`Дата договора`,   
p.`Фактическая площадь`,   
d.`Сумма договора`,   
p.`Платеж 1`,   
p.`Платеж 2`,   
p.`Платеж 3`,   
p.`Платеж 4`,   
p.`Платеж 5`,   
p.`Платеж 6`,   
p.`Платеж 7`,   
p.`Платеж 8`,   
p.`Платеж 9`
FROM   
(   
`C:\Информационное поле\Помещения.xlsx`.`Помещения$` p
LEFT JOIN
`C:\Информационное поле\Договоры.xlsx`.`Договоры$` d
ON p.`Строительный проект` = d.`Строительный проект`
AND p.`Строительный объект` = d.Объект
AND p.`Номер помещения` = d.Помещение
)
LEFT JOIN
`C:\Информационное поле\Объекты.xlsx`.`Объекты$` o,   
ON p.`Строительный проект` = o.`Строительный проект`   
AND p.`Строительный объект` = o.`Строительный объект`
ORDER BY p.`Строительный проект`
[/vba]
Попробуйте на своих данных!
К сообщению приложен файл: 7627623.xlsx(11.9 Kb)


Мой tip box - яд 41001663842605

Сообщение отредактировал Gustav - Пятница, 08.08.2014, 14:06
 
Ответить
Сообщение
В acesse это делается инструкциями JOIN (INNER, RIGHT, LEFT) а здесь в excele синтаксис какой то другой.

Точно так же всё делается.
Только пишется ручками, а не мышкой, потому что графически MS Query не умеет такие запросы отображать (не дорос он, понимаешь, до Access'а). ниже выяснили, что умеет
Так что жмете пиктограмму SQL и редактируете свой запрос. В качестве примера прикладываю файл с двумя таблицами и текст запроса с LEFT JOIN:

[vba]
Код
SELECT a.F1, a.F2, b.F3
FROM Табл1 a LEFT JOIN Табл2 b
ON a.F1 = b.F1
[/vba]

P.S. Сейчас и Вам напишем. Первым делом придадим запросу более удобоваримый вид, разделив на просматриваемые логические части:
[vba]
Код
SELECT     
`Помещения$`.`Строительный проект`,     
`Помещения$`.`Строительный объект`,     
`Помещения$`.`Номер помещения`,     
`Договоры$`.Контрагент,     
`Договоры$`.Консультант,     
`Договоры$`.`Дата договора`,     
`Помещения$`.`Фактическая площадь`,     
`Договоры$`.`Сумма договора`,     
`Помещения$`.`Платеж 1`,     
`Помещения$`.`Платеж 2`,     
`Помещения$`.`Платеж 3`,     
`Помещения$`.`Платеж 4`,     
`Помещения$`.`Платеж 5`,     
`Помещения$`.`Платеж 6`,     
`Помещения$`.`Платеж 7`,     
`Помещения$`.`Платеж 8`,     
`Помещения$`.`Платеж 9`
FROM     
`C:\Информационное поле\Договоры.xlsx`.`Договоры$` `Договоры$`,     
`C:\Информационное поле\Объекты.xlsx`.`Объекты$` `Объекты$`,     
`C:\Информационное поле\Помещения.xlsx`.`Помещения$` `Помещения$`
WHERE `Договоры$`.`Строительный проект` = `Помещения$`.`Строительный проект`     
      AND `Договоры$`.Объект = `Помещения$`.`Строительный объект`     
      AND `Договоры$`.Помещение = `Помещения$`.`Номер помещения`     
      AND `Объекты$`.`Строительный проект` = `Помещения$`.`Строительный проект`     
      AND `Объекты$`.`Строительный объект` = `Помещения$`.`Строительный объект`
ORDER BY `Помещения$`.`Строительный проект`
[/vba]
Чтобы было еще веселее, введем однобуквенные псевдонимы для таблиц - латинские p, d, o:
[vba]
Код
SELECT     
p.`Строительный проект`,     
p.`Строительный объект`,     
p.`Номер помещения`,     
d.Контрагент,     
d.Консультант,     
d.`Дата договора`,     
p.`Фактическая площадь`,     
d.`Сумма договора`,     
p.`Платеж 1`,     
p.`Платеж 2`,     
p.`Платеж 3`,     
p.`Платеж 4`,     
p.`Платеж 5`,     
p.`Платеж 6`,     
p.`Платеж 7`,     
p.`Платеж 8`,     
p.`Платеж 9`
FROM     
`C:\Информационное поле\Договоры.xlsx`.`Договоры$` d,     
`C:\Информационное поле\Объекты.xlsx`.`Объекты$` o,     
`C:\Информационное поле\Помещения.xlsx`.`Помещения$` p
WHERE d.`Строительный проект` = p.`Строительный проект`     
      AND d.Объект = p.`Строительный объект`     
      AND d.Помещение = p.`Номер помещения`     
      AND o.`Строительный проект` = p.`Строительный проект`     
      AND o.`Строительный объект` = p.`Строительный объект`
ORDER BY p.`Строительный проект`
[/vba]
Обратите внимание, сколько хлопот доставляют пробелы в наименованиях полей. Лучше их избегать для подобных задач.

Окончательно получаем нечто следующее (после некоторой перегруппировки предложений):
[vba]
Код
SELECT   
p.`Строительный проект`,   
p.`Строительный объект`,   
p.`Номер помещения`,   
d.Контрагент,   
d.Консультант,   
d.`Дата договора`,   
p.`Фактическая площадь`,   
d.`Сумма договора`,   
p.`Платеж 1`,   
p.`Платеж 2`,   
p.`Платеж 3`,   
p.`Платеж 4`,   
p.`Платеж 5`,   
p.`Платеж 6`,   
p.`Платеж 7`,   
p.`Платеж 8`,   
p.`Платеж 9`
FROM   
(   
`C:\Информационное поле\Помещения.xlsx`.`Помещения$` p
LEFT JOIN
`C:\Информационное поле\Договоры.xlsx`.`Договоры$` d
ON p.`Строительный проект` = d.`Строительный проект`
AND p.`Строительный объект` = d.Объект
AND p.`Номер помещения` = d.Помещение
)
LEFT JOIN
`C:\Информационное поле\Объекты.xlsx`.`Объекты$` o,   
ON p.`Строительный проект` = o.`Строительный проект`   
AND p.`Строительный объект` = o.`Строительный объект`
ORDER BY p.`Строительный проект`
[/vba]
Попробуйте на своих данных!

Автор - Gustav
Дата добавления - 08.08.2014 в 10:33
PowerBoy Дата: Пятница, 08.08.2014, 13:38 | Сообщение № 4
Группа: Проверенные
Ранг: Участник
Сообщений: 100
Репутация: 31 ±
Замечаний: 0% ±

2003
Только пишется ручками, а не мышкой, потому что графически MS Query не умеет такие запросы отображать (не дорос он, понимаешь, до Access'а).


Почему это не умеет? Умеет. Мышкой протягиваешь связь между полями, затем два раза на линию связи кликнул - выбрал тип соединения один ко многим.


Excel + SQL = ActiveTables (http://vk.com/ExcelSQL)
 
Ответить
Сообщение
Только пишется ручками, а не мышкой, потому что графически MS Query не умеет такие запросы отображать (не дорос он, понимаешь, до Access'а).


Почему это не умеет? Умеет. Мышкой протягиваешь связь между полями, затем два раза на линию связи кликнул - выбрал тип соединения один ко многим.

Автор - PowerBoy
Дата добавления - 08.08.2014 в 13:38
Gustav Дата: Пятница, 08.08.2014, 14:03 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1789
Репутация: 711 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
затем два раза на линию связи кликнул

И правда! Спасибо! А я чего-то по своей старой аксессной привычке нажал ПКМ и ждал пункта "Параметры объединения" - не вышло. А дабл-кликнуть в голову не пришло...


Мой tip box - яд 41001663842605
 
Ответить
Сообщение
затем два раза на линию связи кликнул

И правда! Спасибо! А я чего-то по своей старой аксессной привычке нажал ПКМ и ждал пункта "Параметры объединения" - не вышло. А дабл-кликнуть в голову не пришло...

Автор - Gustav
Дата добавления - 08.08.2014 в 14:03
makc1985 Дата: Суббота, 09.08.2014, 02:55 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Спасибо! Только он просто LEFT JOIN не воспринимает, говорит, что только LEFT OUTER JOIN, и это возможно только если в запросе две таблицы, то есть пишет, "Невозможно создать внешнее объединение, если запрос содержит больше двух таблиц"!, Но это как то плохо)) И никак это не обойти??
 
Ответить
СообщениеСпасибо! Только он просто LEFT JOIN не воспринимает, говорит, что только LEFT OUTER JOIN, и это возможно только если в запросе две таблицы, то есть пишет, "Невозможно создать внешнее объединение, если запрос содержит больше двух таблиц"!, Но это как то плохо)) И никак это не обойти??

Автор - makc1985
Дата добавления - 09.08.2014 в 02:55
makc1985 Дата: Суббота, 09.08.2014, 03:16 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Окончательно получаем нечто следующее (после некоторой перегруппировки предложений):

Че то не срабатывает, сначала ругается Невозможно добавить в таблицу '(' , если убрать скобки пишет ошибка в предложении FROM, а если оставить скобки и убрать часть кода про присоединение второй таблицы "объекты"
[vba]
Код

LEFT JOIN
`C:\Информационное поле\Объекты.xlsx`.`Объекты$` o,    
ON p.`Строительный проект` = o.`Строительный проект`    
AND p.`Строительный объект` = o.`Строительный объект`
ORDER BY p.`Строительный проект`
[/vba]
то все отрабатывает отлично.
В чем проблема?
 
Ответить
Сообщение
Окончательно получаем нечто следующее (после некоторой перегруппировки предложений):

Че то не срабатывает, сначала ругается Невозможно добавить в таблицу '(' , если убрать скобки пишет ошибка в предложении FROM, а если оставить скобки и убрать часть кода про присоединение второй таблицы "объекты"
[vba]
Код

LEFT JOIN
`C:\Информационное поле\Объекты.xlsx`.`Объекты$` o,    
ON p.`Строительный проект` = o.`Строительный проект`    
AND p.`Строительный объект` = o.`Строительный объект`
ORDER BY p.`Строительный проект`
[/vba]
то все отрабатывает отлично.
В чем проблема?

Автор - makc1985
Дата добавления - 09.08.2014 в 03:16
makc1985 Дата: Суббота, 09.08.2014, 03:28 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
К сообщению приложен файл: 7627623.xlsx(12Kb)

Че то в файле я ничего не нашел((
 
Ответить
Сообщение
К сообщению приложен файл: 7627623.xlsx(12Kb)

Че то в файле я ничего не нашел((

Автор - makc1985
Дата добавления - 09.08.2014 в 03:28
Gustav Дата: Суббота, 09.08.2014, 10:04 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1789
Репутация: 711 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Вот. Создал вам развернутую демонстрашку. Исходные таблицы - в трех файлах Book1-3, результат запроса - в Book4, сам запрос - в файле Qry.dqy. Все файлы из архива надо развернуть в папке C:\Query.

Текст запроса из 3-х таблиц с LEFT OUTER JOIN (работающий!) дублирую также здесь:
[vba]
Код
SELECT a.F1, a.F2, b.F3, c.F4   
FROM   
(    
`C:\Query\Book1.xlsx`.Табл1 a    
LEFT OUTER JOIN    
`C:\Query\Book2.xlsx`.Табл2 b    
ON a.F1 = b.F1   
)   
LEFT OUTER JOIN    
`C:\Query\Book3.xlsx`.Табл3 c    
ON a.F1 = c.F1  
[/vba]
К сожалению, такой запрос одной мышкой не натыкать и ручками-таки всё же придется потрудиться.

Запрос, который я написал ранее по вашим данным, я писал, разумеется вслепую и журить меня за него бессмысленно. Он предназначался для указания общего направления изысканий (как филин из анекдота про мышей, "я стратегией занимаюсь")
К сообщению приложен файл: Query.rar(28.9 Kb)


Мой tip box - яд 41001663842605
 
Ответить
СообщениеВот. Создал вам развернутую демонстрашку. Исходные таблицы - в трех файлах Book1-3, результат запроса - в Book4, сам запрос - в файле Qry.dqy. Все файлы из архива надо развернуть в папке C:\Query.

Текст запроса из 3-х таблиц с LEFT OUTER JOIN (работающий!) дублирую также здесь:
[vba]
Код
SELECT a.F1, a.F2, b.F3, c.F4   
FROM   
(    
`C:\Query\Book1.xlsx`.Табл1 a    
LEFT OUTER JOIN    
`C:\Query\Book2.xlsx`.Табл2 b    
ON a.F1 = b.F1   
)   
LEFT OUTER JOIN    
`C:\Query\Book3.xlsx`.Табл3 c    
ON a.F1 = c.F1  
[/vba]
К сожалению, такой запрос одной мышкой не натыкать и ручками-таки всё же придется потрудиться.

Запрос, который я написал ранее по вашим данным, я писал, разумеется вслепую и журить меня за него бессмысленно. Он предназначался для указания общего направления изысканий (как филин из анекдота про мышей, "я стратегией занимаюсь")

Автор - Gustav
Дата добавления - 09.08.2014 в 10:04
makc1985 Дата: Вторник, 12.08.2014, 09:13 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Запрос, который я написал ранее по вашим данным, я писал, разумеется вслепую и журить меня за него бессмысленно. Он предназначался для указания общего направления изысканий (как филин из анекдота про мышей, "я стратегией занимаюсь")

Огромное спасибо, осталось еще пару рывков, я сложил три таблицы
Получилось так
[vba]
Код

SELECT c.`Строительный проект`, c.`Строительный объект`, a.`Номер помещения`, b.`Дата договора`, b.Контрагент,  b.Консультант, a.`Фактическая площадь`, b.`Сумма договора`, c.`Платеж 1`, c.`Платеж 2`, c.`Платеж 3`, c.`Платеж 4`, c.`Платеж 5`, c.`Платеж 6`, c.`Платеж 7`, c.`Платеж 8`, c.`Платеж 9` FROM ( ( `C:\Информационное поле\Объекты.xlsx`.`Объекты$` c LEFT OUTER JOIN   `C:\Информационное поле\Помещения.xlsx`.`Помещения$` a   ON c.`Строительный проект` = a.`Строительный проект` AND c.`Строительный объект` = a.`Строительный объект` )  LEFT OUTER JOIN   `C:\Информационное поле\Договоры.xlsx`.`Договоры$` b   ON a.`Строительный проект` = b.`Строительный проект` AND a.`Строительный объект` = b.`Объект` AND a.`Номер помещения` = b.`Помещение`)   

[/vba]

Теперь в результате выполнения запроса он выгружает как надо, но также выгружает много пустых строк, хотел добавить условие типа
[vba]
Код

AND c.`Строительный объект`>'0'
[/vba]
Чтобы вывести только не пустые строки, только куда и как это воткнуть я не могу ссобразить, я пытаюсь добавить это условие вот сюда

[vba]
Код

  FROM ( ( `C:\Информационное поле\Объекты.xlsx`.`Объекты$` c LEFT OUTER JOIN   `C:\Информационное поле\Помещения.xlsx`.`Помещения$` a   ON c.`Строительный проект` = a.`Строительный проект` AND c.`Строительный объект` = a.`Строительный объект` AND c.`Строительный объект`>'0' )

[/vba]

Не получается говорит невозможно добавить в таблицу '('
как ни пробовал и скобочки добавить, не получается!
 
Ответить
Сообщение
Запрос, который я написал ранее по вашим данным, я писал, разумеется вслепую и журить меня за него бессмысленно. Он предназначался для указания общего направления изысканий (как филин из анекдота про мышей, "я стратегией занимаюсь")

Огромное спасибо, осталось еще пару рывков, я сложил три таблицы
Получилось так
[vba]
Код

SELECT c.`Строительный проект`, c.`Строительный объект`, a.`Номер помещения`, b.`Дата договора`, b.Контрагент,  b.Консультант, a.`Фактическая площадь`, b.`Сумма договора`, c.`Платеж 1`, c.`Платеж 2`, c.`Платеж 3`, c.`Платеж 4`, c.`Платеж 5`, c.`Платеж 6`, c.`Платеж 7`, c.`Платеж 8`, c.`Платеж 9` FROM ( ( `C:\Информационное поле\Объекты.xlsx`.`Объекты$` c LEFT OUTER JOIN   `C:\Информационное поле\Помещения.xlsx`.`Помещения$` a   ON c.`Строительный проект` = a.`Строительный проект` AND c.`Строительный объект` = a.`Строительный объект` )  LEFT OUTER JOIN   `C:\Информационное поле\Договоры.xlsx`.`Договоры$` b   ON a.`Строительный проект` = b.`Строительный проект` AND a.`Строительный объект` = b.`Объект` AND a.`Номер помещения` = b.`Помещение`)   

[/vba]

Теперь в результате выполнения запроса он выгружает как надо, но также выгружает много пустых строк, хотел добавить условие типа
[vba]
Код

AND c.`Строительный объект`>'0'
[/vba]
Чтобы вывести только не пустые строки, только куда и как это воткнуть я не могу ссобразить, я пытаюсь добавить это условие вот сюда

[vba]
Код

  FROM ( ( `C:\Информационное поле\Объекты.xlsx`.`Объекты$` c LEFT OUTER JOIN   `C:\Информационное поле\Помещения.xlsx`.`Помещения$` a   ON c.`Строительный проект` = a.`Строительный проект` AND c.`Строительный объект` = a.`Строительный объект` AND c.`Строительный объект`>'0' )

[/vba]

Не получается говорит невозможно добавить в таблицу '('
как ни пробовал и скобочки добавить, не получается!

Автор - makc1985
Дата добавления - 12.08.2014 в 09:13
Gustav Дата: Вторник, 12.08.2014, 11:22 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1789
Репутация: 711 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
только куда и как это воткнуть я не могу ссобразить

Это условие надо поместить в обычную общую секцию WHERE в конце запроса:

SELECT
c.`Строительный проект`,
c.`Строительный объект`,
a.`Номер помещения`,
b.`Дата договора`,
b.Контрагент,
b.Консультант,
a.`Фактическая площадь`,
b.`Сумма договора`,
c.`Платеж 1`,
c.`Платеж 2`,
c.`Платеж 3`,
c.`Платеж 4`,
c.`Платеж 5`,
c.`Платеж 6`,
c.`Платеж 7`,
c.`Платеж 8`,
c.`Платеж 9`
FROM
( (
`C:\Информационное поле\Объекты.xlsx`.`Объекты$` c
LEFT OUTER JOIN
`C:\Информационное поле\Помещения.xlsx`.`Помещения$` a
ON c.`Строительный проект` = a.`Строительный проект`
AND c.`Строительный объект` = a.`Строительный объект`
)
LEFT OUTER JOIN
`C:\Информационное поле\Договоры.xlsx`.`Договоры$` b
ON a.`Строительный проект` = b.`Строительный проект`
AND a.`Строительный объект` = b.`Объект`
AND a.`Номер помещения` = b.`Помещение`
)
WHERE c.`Строительный объект` > '0'


Мой tip box - яд 41001663842605

Сообщение отредактировал Gustav - Вторник, 12.08.2014, 11:24
 
Ответить
Сообщение
только куда и как это воткнуть я не могу ссобразить

Это условие надо поместить в обычную общую секцию WHERE в конце запроса:

SELECT
c.`Строительный проект`,
c.`Строительный объект`,
a.`Номер помещения`,
b.`Дата договора`,
b.Контрагент,
b.Консультант,
a.`Фактическая площадь`,
b.`Сумма договора`,
c.`Платеж 1`,
c.`Платеж 2`,
c.`Платеж 3`,
c.`Платеж 4`,
c.`Платеж 5`,
c.`Платеж 6`,
c.`Платеж 7`,
c.`Платеж 8`,
c.`Платеж 9`
FROM
( (
`C:\Информационное поле\Объекты.xlsx`.`Объекты$` c
LEFT OUTER JOIN
`C:\Информационное поле\Помещения.xlsx`.`Помещения$` a
ON c.`Строительный проект` = a.`Строительный проект`
AND c.`Строительный объект` = a.`Строительный объект`
)
LEFT OUTER JOIN
`C:\Информационное поле\Договоры.xlsx`.`Договоры$` b
ON a.`Строительный проект` = b.`Строительный проект`
AND a.`Строительный объект` = b.`Объект`
AND a.`Номер помещения` = b.`Помещение`
)
WHERE c.`Строительный объект` > '0'

Автор - Gustav
Дата добавления - 12.08.2014 в 11:22
makc1985 Дата: Среда, 13.08.2014, 01:58 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Это условие надо поместить в обычную общую секцию WHERE в конце запроса:

Спасибо огроменное вот я вообще редиска, все перепробовал а этот вариант не попробовал!
Тут вот еще какой вопрос меня давно мучил, можно ли как то автоматом изменять запрос? То есть чтобы не было жесткой привязки к папке С:\Информационное поле, чтобы эти файлы можно было копировать в любое место, допустим как в accesse это бы выглядело как CurrentProgectPath! А в excele я не знаю может ли макрос допустим поправлять запрос? скажем при открытии документа менять строку С:\Информационное поле на текущую папку где находятся сами файлы?
 
Ответить
Сообщение
Это условие надо поместить в обычную общую секцию WHERE в конце запроса:

Спасибо огроменное вот я вообще редиска, все перепробовал а этот вариант не попробовал!
Тут вот еще какой вопрос меня давно мучил, можно ли как то автоматом изменять запрос? То есть чтобы не было жесткой привязки к папке С:\Информационное поле, чтобы эти файлы можно было копировать в любое место, допустим как в accesse это бы выглядело как CurrentProgectPath! А в excele я не знаю может ли макрос допустим поправлять запрос? скажем при открытии документа менять строку С:\Информационное поле на текущую папку где находятся сами файлы?

Автор - makc1985
Дата добавления - 13.08.2014 в 01:58
Pelena Дата: Среда, 13.08.2014, 08:31 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 16051
Репутация: 3488 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
makc1985, посмотрите здесь, может, натолкнёт на мысль


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщениеmakc1985, посмотрите здесь, может, натолкнёт на мысль

Автор - Pelena
Дата добавления - 13.08.2014 в 08:31
Gustav Дата: Среда, 13.08.2014, 12:16 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1789
Репутация: 711 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
скажем при открытии документа менять строку С:\Информационное поле на текущую папку где находятся сами файлы?

Применительно не конкретно к Вашему примеру, а к своей демонстрашке. В книге Book4 (та, которая с запросом) я создал бы новый лист - Лист2. На нем бы разместил следующие формулы:

(ячейки A1:A18)
Текущий путь к папке:
Строка подключения:
Имя таблицы 1:
Имя таблицы 2:
Имя таблицы 3:
Текст запроса SQL:
исходный
SELECT a.F1, a.F2, b.F3, c.F4
FROM
(
=B3
LEFT OUTER JOIN
=B4
ON a.F1 = b.F1
)
LEFT OUTER JOIN
=B5
ON a.F1 = c.F1


(ячейки B1:B18)
=ЛЕВСИМВ(ЯЧЕЙКА("имяфайла");ПОИСК("[";ЯЧЕЙКА("имяфайла"))-1)
="ODBC;DSN=Excel Files;DBQ="&B1&"Book1.xlsx;DefaultDir="&B1&";DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"
="`"&$B$1&"Book1.xlsx`.Табл1 a"
="`"&$B$1&"Book2.xlsx`.Табл2 b"
="`"&$B$1&"Book3.xlsx`.Табл3 c"

с пробелами в начале строки
=" "&A8
=" "&A9
=" "&A10
=" "&A11
=" "&A12
=" "&A13
=" "&A14
=" "&A15
=" "&A16
=" "&A17
=" "&A18


Формулы можно скопировать блоками прямо отсюда в соответствующие ячейки, предварительно включив на рабочем листе режим отображения формул по Ctrl+~ (Ctrl+Ё). Я так подробно расписываю не только в учебных целях, но и из уважения к обладателям мобильных гаджетов, которые могут не быть в состоянии открыть прилагаемый файл :) (файл я, возможно, тоже приложу).

Ну, и понадобится макрос обновления параметров запроса. Поскольку вся вычислительная работа уже выполнена на листе, то макрос будет совсем несложный:
[vba]
Код
Sub updatePath()
     With ActiveWorkbook.Connections(1).ODBCConnection
         .CommandText = [Лист2!B8:B18].Value
         .Connection = [Лист2!B2].Value
     End With
End Sub
[/vba]
Согласитесь, в хранении текста запроса в ячейках листа - в хорошо просматриваемом и структурированном виде - определенно есть свои плюсы!


Мой tip box - яд 41001663842605

Сообщение отредактировал Gustav - Среда, 13.08.2014, 20:00
 
Ответить
Сообщение
скажем при открытии документа менять строку С:\Информационное поле на текущую папку где находятся сами файлы?

Применительно не конкретно к Вашему примеру, а к своей демонстрашке. В книге Book4 (та, которая с запросом) я создал бы новый лист - Лист2. На нем бы разместил следующие формулы:

(ячейки A1:A18)
Текущий путь к папке:
Строка подключения:
Имя таблицы 1:
Имя таблицы 2:
Имя таблицы 3:
Текст запроса SQL:
исходный
SELECT a.F1, a.F2, b.F3, c.F4
FROM
(
=B3
LEFT OUTER JOIN
=B4
ON a.F1 = b.F1
)
LEFT OUTER JOIN
=B5
ON a.F1 = c.F1


(ячейки B1:B18)
=ЛЕВСИМВ(ЯЧЕЙКА("имяфайла");ПОИСК("[";ЯЧЕЙКА("имяфайла"))-1)
="ODBC;DSN=Excel Files;DBQ="&B1&"Book1.xlsx;DefaultDir="&B1&";DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"
="`"&$B$1&"Book1.xlsx`.Табл1 a"
="`"&$B$1&"Book2.xlsx`.Табл2 b"
="`"&$B$1&"Book3.xlsx`.Табл3 c"

с пробелами в начале строки
=" "&A8
=" "&A9
=" "&A10
=" "&A11
=" "&A12
=" "&A13
=" "&A14
=" "&A15
=" "&A16
=" "&A17
=" "&A18


Формулы можно скопировать блоками прямо отсюда в соответствующие ячейки, предварительно включив на рабочем листе режим отображения формул по Ctrl+~ (Ctrl+Ё). Я так подробно расписываю не только в учебных целях, но и из уважения к обладателям мобильных гаджетов, которые могут не быть в состоянии открыть прилагаемый файл :) (файл я, возможно, тоже приложу).

Ну, и понадобится макрос обновления параметров запроса. Поскольку вся вычислительная работа уже выполнена на листе, то макрос будет совсем несложный:
[vba]
Код
Sub updatePath()
     With ActiveWorkbook.Connections(1).ODBCConnection
         .CommandText = [Лист2!B8:B18].Value
         .Connection = [Лист2!B2].Value
     End With
End Sub
[/vba]
Согласитесь, в хранении текста запроса в ячейках листа - в хорошо просматриваемом и структурированном виде - определенно есть свои плюсы!

Автор - Gustav
Дата добавления - 13.08.2014 в 12:16
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Запрос из Microsoft Query из нескольких источников (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2020 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!