Страницы: 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
Страницы: 1
Наверх