Добрый день, уважаемые форумчане! Есть у меня небольшой файл с примером формирования таблицы SQL-запросом. Подарил мне его когда-то Андрей VG. Разобрался я в нем тогда не на 100%, но это позволяло мне использовать имеющийся в нем механизм в ряде моих инструментов. В данный момент возникла необходимость "прилепить" к сформированной таблице снизу точно такую же по структуре таблицу, из того же источника, только с несколькими другими столбцами. Т. е. в примере нужно сделать так, чтобы к имеющейся таблице снизу добавилась точно такая же таблица, столбцы которой можно будет впоследствии изменять. И вот никак я не могу добиться результата. При использовании "Union All" программа просит добавить три параметра (даты), а когда я их задаю, то ругается на "Несоответствие типов данных в выражении условия отбора". Может подскажете в чем моя ошибка или в какую сторону "копать"?
Файл-пример работает при размещении в корне диcка D.
сейчас из таблицы "База" формируется таблица "Свод"; нужно из таблицы "База" сформировать две одинаковые таблицы "Свод" одну под другой, но чтобы столбцы нижней таблицы потом можно было изменять
т. е. к таблице "Свод" снизу добавить еще одну таблицу "Свод"
на листе "Свод" вручную дорисовал как должен выглядеть конечный результат, а также привел пример изначального рабочего кода и моего кода, который не хочет работать
может кто-нибудь мне просто подскажет: логически, если к одному SQL-запросу, формирующему таблицу, через "Union All" добавить точно такой же запрос, то в результате получатся две одинаковые таблицы (я даже проверял это на нескольких примерах), но почему тогда в моем случае этого не происходит, а программа возвращает "Несоответствие типов данных в выражении условия отбора"?
Мне кажется ошибка в коде sql запроса связана с тем, что в нём можно использовать только один union или union all. Приведите пример что есть и что надо получить. Мне из приведенного примера не понятно что было и что добавилось (предполагаю что в "свод" добавляются записи из "база" дата которых попадает в заданный диапазон на листе "свод").
результат получился правильный, но не тем способом: 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, я обращался на SQL-форумы, там тоже ничего не знают... тут может быть что-то связано именно с параметрами Excel; в прилагаемых файлах попробую наглядно спросить про "знаки вопроса"...
sasch78, а какова цель использования "?" в вашем запросе? Почему просто не пропишите конкретное условие? Я как бы в SQL любитель и всех тонкостей не знаю..
Vladimir Ch, просто это очень удобный и интересный инструмент, хотелось бы в нем разобраться; первые три "?" отрабатывают идеально: таблица формируется автоматически при внесении даты в ячейку, а с последующими параметрами почему-то проблемы...
обратитесь на тот, что по ссылке от меня. Этот — правильный Там и разберём с местными. Они скуль больше меня знают.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
sasch78, Я что-то хз, Как у Вас работают такие запросы По идее ? - это плейсхрлдер для параметра. То есть запрос должен быть вида … where [Дата] <= ?d … А d - какой-то параметр, значение которого берется, к примеру, из ячейки. А просто ? какая-то странная вещь, на мой взгляд. Особо больше не подскажу.
P.S. Лучше бы PQ попробовали, Вам бы давно реализовали
upd: Вроде, далее в коде у Вас должны перечисляться параметры, которые будут подставляться вместо плейсхолдера ? Вот тут можете почитать.
короче, проблема у меня не в запросе (он 100% рабочий!); сложность в "привязке" к запросу условий из ячеек в Excel 2021; информации в интернете о последовательности действий для осуществления такой "привязки" совсем нет... что-то было здесь https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=65191&T..., но тоже не совсем понятно...
написал: информации в интернете о последовательности действий для осуществления такой "привязки" совсем нет.
Может поможет (если знаете английский) : https://www.youtube.com/watch?v=I31Mh5-8Z1g&list=PLNIs-AWhQzclbRVLCZlsFvpz6fz2nPGbt&index=11 Что-то Ваш sql-запрос не так работает, как в Вашем примере (но с этим разбирайтесь сами, т.к. с sql мало знаком). Во вложении пробный вариант - в текстовый файл Ваш sql-запрос, в коде макроса оставил комментарий, где менять параметры (для универсальности доработаете сами). Протестируйте.
Alex, спасибо за подсказки... и хоть в английском я дуб, как и в sql, но мне уже интересно не просто получить результат любым способом, а именно понять алгоритм соединения sql-запроса с данными ячеек в Excel 2021 без использования макросов
это какой-то внезапный приплызд! спустя год хаотических манипуляций все заработало!!! сему предшествовало колдовство с именами параметров в файле .odc, затем перемена местами блоков запроса и, в связи с этим, переназначение ячеек в параметрах...