BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
SQL запрос, БЭСТ5: трабл при объединении запросов
 
Добрый день.

Есть два запроса, каждый из которых отдельно работает и выдаёт нужные результаты, а при объединении предложением UNION выдаётся ошибка следующего содержания: "Ошибка в строке 35 SELECTs are not UNION compatible. 1851". Может кто подскажет, где я ошибаюсь...

Цель запроса - получить сводную таблицу с названиями статей затрат (rasxod.name) и названиями пользовательского сегмента аналитики (analit_seg.name)

Текст объединённого запроса:

sel ect substr(main.dt_schet,1,5) as dt_schet,
main.dt_code as dt_code,
rasxod.name as anlname,
"Счета" as "Управление",
SUM(main.summa) as summa1
fr om main
join rasxod on main.dt_code = rasxod.code
where main.dataoper >= :Date1
and main.dataoper <= :Date2
and (substr(main.dt_schet,1,5) = "20010"
or substr(main.dt_schet,1,5) = "20030"
or substr(main.dt_schet,1,5) = "20040"
or substr(main.dt_schet,1,5) = "44020"
or substr(main.dt_schet,1,5) = "23010"
or substr(main.dt_schet,1,5) = "25040"
or substr(main.dt_schet,1,5) = "25060"
or substr(main.dt_schet,1,5) = "26010"
or substr(main.dt_schet,1,5) = "2602"
or substr(main.dt_schet,1,5) = "29010")
uni on
sel ect substr(m1.dt_schet,1,5) as dt_schet,
m1.dt_code as dt_code,
analit_seg.name as anlname,
"Счета" as "Управление",
SUM(m1.summa) as summa1
fr om main as m1
join sch_seg on m1.dt_schet = sch_seg.schet
join analit_seg on sch_seg.dim_id = analit_seg.dim_id
where m1.dataoper >= :Date1
and m1.dataoper <= :Date2
and substr(m1.dt_schet,1,5) = "2503"

group by dt_schet,dt_code
Счастливый бухгалтер
 
Добрый день!
1. Такая ошибка может быьть из-за различия структур.
2. Думаю, что параметры во втором запросе, д.б. другие :Date3 и :Date4 т.е. будет не два, а четыре параметра.
 
Я проверил это предположение.. выставил вместо Date3 Date1, а вместо Date4 Date2. Результат такой же - ошибка.
Мне и удивительно, что выдаётся ошибка так, как возвращаемые таблицы по каждому запросу идентичны и проблем возникнуть вообще не должно...
Счастливый бухгалтер
 
Добрый день!
Мое предположение оказалось не верным - ошибка в структуре запросов. Поле rasxod.name имееют длину 50, а поле analit_seg.name имеет длину 250. Я постатвил во втором запросе формулу SUBSTR(analit_seg.name,1,50) для поля anlname и отчет заработал.
Код
select substr(main.dt_schet,1,5) as dt_schet,
main.dt_code as dt_code,
rasxod.name as anlname,
"Счета" as "Управление",
SUM(main.summa) as summa1
from main
join rasxod on main.dt_code = rasxod.code
where main.dataoper >= :Date1
and main.dataoper <= :Date2
and (substr(main.dt_schet,1,5) = "20010"
or substr(main.dt_schet,1,5) = "20030"
or substr(main.dt_schet,1,5) = "20040"
or substr(main.dt_schet,1,5) = "44020"
or substr(main.dt_schet,1,5) = "23010"
or substr(main.dt_schet,1,5) = "25040"
or substr(main.dt_schet,1,5) = "25060"
or substr(main.dt_schet,1,5) = "26010"
or substr(main.dt_schet,1,5) = "2602"
or substr(main.dt_schet,1,5) = "29010")
union
select substr(m1.dt_schet,1,5) as dt_schet,
m1.dt_code as dt_code,
SUBSTR(analit_seg.name,1,50) as anlname,
"Счета" as "Управление",
SUM(m1.summa) as summa1
from main as m1
join sch_seg on m1.dt_schet = sch_seg.schet
join analit_seg on sch_seg.dim_id = analit_seg.dim_id
where m1.dataoper >= :Date1
and m1.dataoper <= :Date2
and substr(m1.dt_schet,1,5) = "2503"
group by dt_schet,dt_code
 
Спасибо за помощь.
Запрос заработал.

Но теперь ситуация такая, ошибка исчезла, но объединения не происходит, то есть результирующий запрос выдает только обороты по 2503, а все остальные счета, игнорируются. То есть запросы, как бы выполняются, но в результирующей таблице показывается результат только последнего запроса ???
Счастливый бухгалтер
 
Добрый день!
Думаю что не отрабатывается условие
Код
main.dt_code = rasxod.code
, предлогаю заменить его на
Код
SUBSTR(main.dt_code,1,6) = rasxod.code
. Так как поле аналитики очень длинное.
 
Да, всё так.
Спасибо.
Счастливый бухгалтер
Страницы: 1
Читают тему (гостей: 1)