powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите вложить запрос
6 сообщений из 6, страница 1 из 1
Помогите вложить запрос
    #39597879
Tonio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Помогите, пожалуйста, вложить запрос.
Есть выборка, объединяющая две таблицы EXCEL (с одинаковой структурой)
Код: vbnet
1.
2.
3.
4.
5.
6.
 strPath1 = "[Отчет1$A4:H] IN '" & ActiveDocument.Path & "\Отгрузка1.xlsx' " & "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']"
    strPath2 = "[Отчет1$A4:H] IN '" & ActiveDocument.Path & "\Отгрузка2.xlsx' " & "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']"
                                              
      strQuery = "SELECT [№ вагона], [Дата отправления], [Ст#отгрузки], [Ст#выгрузки] FROM " & strPath1 & " WHERE [№ вагона] in (" & strQuery_disl & ")" & _
        "UNION " & _
        "SELECT [№ вагона], [Дата отправления], [Ст#отгрузки], [Ст#выгрузки] FROM " & strPath2 & " WHERE [№ вагона] in (" & strQuery_disl & ")" & "ORDER BY [№ вагона], [Дата отправления] DESC ;"


Есть выборка максимальной даты для каждого отдельного вагона из одной таблицы:
Код: vbnet
1.
2.
3.
4.
strPath1 = "[Отчет1$A4:H] as t1 IN '" & ActiveDocument.Path & "\Отгрузка1.xlsx' " & "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']"
    strPath2 = "[Отчет1$A4:H] as t2 IN '" & ActiveDocument.Path & "\Отгрузка1.xlsx' " & "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']"
 
    strQuery = "SELECT * FROM " & strPath1 & " WHERE [Дата отправления] IN (SELECT MAX([Дата отправления]) " & " FROM " & strPath2 & " WHERE t2.[№ вагона]=t1.[№ вагона]) " & " ORDER BY [№ вагона], [Дата отправления] DESC ;"


Вопрос: как связать эти методы и сделать выборку максимальной даты для каждого вагона из объединенных таблиц? То есть, вложить один запрос в другой?
...
Рейтинг: 0 / 0
Помогите вложить запрос
    #39598600
Tonio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди добрые, помогите, третий день бьюсь над ответом.
...
Рейтинг: 0 / 0
Помогите вложить запрос
    #39598621
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Грубо говоря, любую выборку можно заменить на вложенный запрос
Код: sql
1.
2.
3.
4.
SELECT A
FROM B
WHERE С
GROUP BY D

=>
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT A
FROM
  (SELECT A FROM B1
   UNION
   SELECT A FROM B2) AS B
WHERE С
GROUP BY D
...
Рейтинг: 0 / 0
Помогите вложить запрос
    #39598666
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProГрубо говоря, любую выборку можно заменить на вложенный запрос

[/src]
думаю тут без вариантов, т.к нужно из разных файлов (понимаем как сервера, конекшены)
Если драйвер понимает инструкцию OPENQUERY, то прокатит, но, думаю, здесь врядли
...
Рейтинг: 0 / 0
Помогите вложить запрос
    #39598722
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в чем проблема, второй запрос-то работает, а он тоже вложенный
...
Рейтинг: 0 / 0
Помогите вложить запрос
    #39598724
Tonio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за помощь! Получилось.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
strPath1 = "[Отчет1$A4:H] IN '" & ActiveDocument.Path & "\Отгрузка1.xlsx' " & "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']"
strPath2 = "[Отчет1$A4:H] IN '" & ActiveDocument.Path & "\Отгрузка2.xlsx' " & "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']"

  strQuery_Union1 = "(SELECT * FROM " & strPath1 & " WHERE [№ вагона] in (" & strQuery_disl & ")" & _
        "UNION " & _
        "SELECT * FROM " & strPath2 & " WHERE [№ вагона] in (" & strQuery_disl & ")) as t1"
  strQuery_Union2 = "(SELECT * FROM " & strPath1 & " WHERE [№ вагона] in (" & strQuery_disl & ")" & _
        "UNION " & _
        "SELECT * FROM " & strPath2 & " WHERE [№ вагона] in (" & strQuery_disl & ")) as t2"

    strQueryFinal = "SELECT * FROM " & strQuery_Union1 & " WHERE [Дата отправления] IN (SELECT MAX([Дата отправления]) " & " FROM " & strQuery_Union2 & " WHERE t2.[№ вагона]=t1.[№ вагона]) " & " ORDER BY [№ вагона], [Дата отправления] DESC ;"
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите вложить запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]