Добрый день, уважаемые форумчане! Есть у меня небольшой файл с примером формирования таблицы 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