Страницы: 1
RSS
Как "прилепить" две схожих таблицы, полученных SQL-запросом?
 
Добрый день, уважаемые форумчане! Есть у меня небольшой файл с примером формирования таблицы SQL-запросом. Подарил мне его когда-то Андрей VG. Разобрался я в нем тогда не на 100%, но это позволяло мне использовать имеющийся в нем механизм в ряде моих инструментов. В данный момент возникла необходимость "прилепить" к сформированной таблице снизу точно такую же по структуре таблицу, из того же источника, только с несколькими другими столбцами. Т. е. в примере нужно сделать так, чтобы к имеющейся таблице снизу добавилась точно такая же таблица, столбцы которой можно будет впоследствии изменять. И вот никак я не могу добиться результата. При использовании "Union All" программа просит добавить три параметра (даты), а когда я их задаю, то ругается на "Несоответствие типов данных в выражении условия отбора". Может подскажете в чем моя ошибка или в какую сторону "копать"?

Файл-пример работает при размещении в корне диcка D.
Изменено: sasch78 - 21.04.2024 02:07:30
 
Какую из таблиц добавить к какой?
Согласие есть продукт при полном непротивлении сторон
 
сейчас из таблицы "База" формируется таблица "Свод"; нужно из таблицы "База" сформировать две одинаковые таблицы "Свод" одну под другой, но чтобы столбцы нижней таблицы потом можно было изменять

т. е. к таблице "Свод" снизу добавить еще одну таблицу "Свод"
Изменено: sasch78 - 17.04.2024 10:51:59
 
Цитата
sasch78 написал:
т. е. к таблице "Свод" снизу добавить еще одну таблицу "Свод"
и
Цитата
sasch78 написал:
но чтобы столбцы нижней таблицы потом можно было изменять
Как это? Можете показать в файле нужный результат?
Согласие есть продукт при полном непротивлении сторон
 
на листе "Свод" вручную дорисовал как должен выглядеть конечный результат, а также привел пример изначального рабочего кода и моего кода, который не хочет работать
 
может кто-нибудь мне просто подскажет: логически, если к одному SQL-запросу, формирующему таблицу, через "Union All" добавить точно такой же запрос, то в результате получатся две одинаковые таблицы (я даже проверял это на нескольких примерах), но почему тогда в моем случае этого не происходит, а программа возвращает "Несоответствие типов данных в выражении условия отбора"?
Изменено: sasch78 - 20.04.2024 09:15:41
 
Мне кажется ошибка в коде sql запроса связана с тем, что в нём можно использовать только один union или union all. Приведите пример что есть и что надо получить. Мне из приведенного примера не понятно что было и что добавилось (предполагаю что в "свод" добавляются записи из "база" дата которых попадает в заданный диапазон на листе "свод").
 
Alice, изначально было так, это рабочий файл, но мне нужно дважды выполнить этот запрос
 
Посмотрите правильно ли я сделал.
 
результат получился правильный, но не тем способом:
1) решение с кнопкой макроса (только другое) у меня есть, я как раз хотел от него уйти и решить задачу исключительно запросом;
2) во второй части запроса я планировал в последствии изменять столбцы, а у вас - цикл...

а нельзя ли получить этот же результат, но исключительно sql-запросом, чтобы таблицы формировались одним изменением даты без кнопки макросов?
при этом нужно учитывать, что данный файл - это абстрактный пример, в рабочих файлах я планировал иметь возможность корректировать вытягиваемые столбцы
 
А почему бы не воспользоваться Power Query? И sql-запрос туда можно засунуть (при этом динамически менять столбцы, к примеру, брать список столбцов из таблицы на листе excel), и просто создать запрос на M, а PQ уже сам преобразует в sql запрос, если это возможно.
 
surkenny, я не против, а сможет ли файл с Power Query без лишних кнопок "Обновить" автоматически подключиться к внешнему файлу и вытянуть из него данные как в запросе, только дважды и с возможностью последующего изменения столбцов в запросе?
 
sasch78, так создайте 2 копии запроса. И к как злому из них свою таблицу с набором столбцов. Поменяли в таблицах столбцов столбцы, нажали обновить все - получили 2 таблицы с нужными столбцами.
Вы почитайте хоть немного о pq :)
 
почему-то этот запрос работает:
Код
Select
Null As [Дата],
t1.[Продукт],
t1.[FSum] As [Остаток на начало периода],
0 As [Приход],
0 As [Расход],
t1.[FSum] As [Остаток на конец периода]
From (Select [Продукт], Sum([Приход] - [Расход]) As FSum From [База$] Where [Дата] < ? Group By [Продукт] Order By [Продукт]) t1

Union All

Select
t2.[Дата],
t2.[Продукт],
t2.[Остаток на начало периода],
t2.[Приход],
t2.[Расход],
t2.[Остаток на конец периода]
From (Select [Дата], [Продукт], [Остаток на начало периода], [Приход], [Расход], [Остаток на конец периода] From [База$] Where [Дата] >= ? And [Дата] <= ? Order By [Дата], [Продукт]) t2
а точно такой же, повторенный через Union All - нет?
Код
Select
Null As [Дата],
t1.[Продукт],
t1.[FSum] As [Остаток на начало периода],
0 As [Приход],
0 As [Расход],
t1.[FSum] As [Остаток на конец периода]
From (Select [Продукт], Sum([Приход] - [Расход]) As FSum From [База$] Where [Дата] < ? Group By [Продукт] Order By [Продукт]) t1

Union All

Select
t2.[Дата],
t2.[Продукт],
t2.[Остаток на начало периода],
t2.[Приход],
t2.[Расход],
t2.[Остаток на конец периода]
From (Select [Дата], [Продукт], [Остаток на начало периода], [Приход], [Расход], [Остаток на конец периода] From [База$] Where [Дата] >= ? And [Дата] <= ? Order By [Дата], [Продукт]) t2

Union All

Select
Null As [Дата],
t1.[Продукт],
t1.[FSum] As [Остаток на начало периода],
0 As [Приход],
0 As [Расход],
t1.[FSum] As [Остаток на конец периода]
From (Select [Продукт], Sum([Приход] - [Расход]) As FSum From [База$] Where [Дата] < ? Group By [Продукт] Order By [Продукт]) t1

Union All

Select
t2.[Дата],
t2.[Продукт],
t2.[Остаток на начало периода],
t2.[Приход],
t2.[Расход],
t2.[Остаток на конец периода]
From (Select [Дата], [Продукт], [Остаток на начало периода], [Приход], [Расход], [Остаток на конец периода] From [База$] Where [Дата] >= ? And [Дата] <= ? Order By [Дата], [Продукт]) t2
 
Я заметил следующую закономерность: все запросы в различных комбинациях отлично работают через Union All до тех пор, пока в тексте запроса присутствуют до трех включительно вопросительных знаков "?". Как только появляется четвертый "?", Excel предлагает добавить Параметр, и после добавления Параметра - все клинит. Подскажите кто знает, возможно где-то существуют настройки Параметров, Имен параметров или что-то с этим связанное?
 
Цитата
sasch78: если к одному SQL-запросу, формирующему таблицу, через "Union All" добавить точно такой же запрос, то в результате получатся две одинаковые таблицы (я даже проверял это на нескольких примерах), но почему тогда в моем случае этого не происходит, а программа возвращает "Несоответствие типов данных в выражении условия отбора"?
попробуйте вопросы по SQL задавать на соответствующих форумах  ;)
    У вас очень странный запрос… Вообще не понял про знаки вопроса.
Изменено: Jack Famous - 24.05.2024 12:08:47
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, я обращался на SQL-форумы, там тоже ничего не знают... тут может быть что-то связано именно с параметрами Excel; в прилагаемых файлах попробую наглядно спросить про "знаки вопроса"...
 
sasch78, а какова цель использования "?" в вашем запросе? Почему просто не пропишите конкретное условие? Я как бы в SQL любитель и всех тонкостей не знаю..
 
Vladimir Ch, просто это очень удобный и интересный инструмент, хотелось бы в нем разобраться; первые три "?" отрабатывают идеально: таблица формируется автоматически при внесении даты в ячейку, а с последующими параметрами почему-то проблемы...
 
Цитата
sasch78: я обращался на SQL-форумы
обратитесь на тот, что по ссылке от меня. Этот — правильный  :D
Там и разберём с местными. Они скуль больше меня знают.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
sasch78,
Я что-то хз, Как у Вас работают такие запросы :) По идее ? - это плейсхрлдер для параметра.
То есть запрос должен быть вида … where [Дата] <= ?d …
А d - какой-то параметр, значение которого берется, к примеру, из ячейки.
А просто ? какая-то странная вещь, на мой взгляд.
Особо больше не подскажу.


P.S. Лучше бы PQ попробовали, Вам бы давно реализовали :)

upd: Вроде, далее в коде у Вас должны перечисляться параметры, которые будут подставляться вместо плейсхолдера ?
Вот тут можете почитать.
Изменено: surkenny - 24.05.2024 20:42:30
 
Jack Famous, спасибо, обращусь
surkenny, попробую поизучать, спасибо
 
короче, проблема у меня не в запросе (он 100% рабочий!); сложность в "привязке" к запросу условий из ячеек в Excel 2021; информации в интернете о последовательности действий для осуществления такой "привязки" совсем нет... что-то было здесь https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=65191&T..., но тоже не совсем понятно...
 
sasch78, добрый вечер.
Цитата
написал:
информации в интернете о последовательности действий для осуществления такой "привязки" совсем нет.
Может поможет (если знаете английский) : https://www.youtube.com/watch?v=I31Mh5-8Z1g&list=PLNIs-AWhQzclbRVLCZlsFvpz6fz2nPGbt&index=11
Что-то Ваш sql-запрос не так работает, как в Вашем примере (но с этим разбирайтесь сами, т.к. с sql мало знаком). Во вложении пробный вариант - в текстовый файл Ваш sql-запрос, в коде макроса оставил комментарий, где менять параметры (для универсальности доработаете сами). Протестируйте.
 
Alex, спасибо за подсказки... и хоть в английском я дуб, как и в sql, но мне уже интересно не просто получить результат любым способом, а именно понять алгоритм соединения sql-запроса с данными ячеек в Excel 2021 без использования макросов
 
это какой-то внезапный приплызд! спустя год хаотических манипуляций все заработало!!! сему предшествовало колдовство с именами параметров в файле .odc, затем перемена местами блоков запроса и, в связи с этим, переназначение ячеек в параметрах...
Страницы: 1
Наверх