Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Юнион не работает (число прочтений - 1526 )
Inner Join (c)
Junior Member
**
Отсутствует


I Love BaBB 2!

Сообщений: 23
Зарегистрирован: 15. Октября 2008
Пол: Мужской
Юнион не работает
11. Февраля 2009 :: 11:34
Печать  
Доброе время суток!
Помогите пож... Ступор уже начался... Есть запрос:

select
     БигС.Док [Док $Документ],
     БигС.ДокВид Док_вид,
     БигС.Тал [Талон $Справочник.ГарантийныеТалоны],
     БигС.Скл [Склад $Справочник.Склады],
     БигС.ПрихД [ПрихД $число],
     БигС.РасхД [РасхД $число],
     РегОст.ресКоличествоПриход [ПрихР $число],
     РегОст.ресКоличествоРасход [РасхР $число]
from
(
select
     ДокС.IDDoc Док,
     $ВидДокумента.ВозвратПокупателя ДокВид,
     СпрГТ.ID Тал,
     $Док.загСклад Скл,
     $ДокС.табКоличествоЕд ПрихД,
     0 РасхД
from $ДокументСтроки.ВозвратПокупателя ДокС
inner join $Документ.ВозвратПокупателя Док on Док.IDDoc = ДокС.IDDoc
inner join _1sjourn j (nolock) on j.IDDoc = ДокС.IDDoc and j.Date_Time_Iddoc between :ДН and :ДК~ and j.Closed & 1 = 1
inner join $Справочник.Товары СпрТ (nolock) on СпрТ.ID = $ДокС.табТовар and СпрТ.IsMark = 0 and $СпрТ.спрПризнакГар = 1
inner join $Справочник.Производитель СпрПр (nolock) on СпрПр.ID = $СпрТ.спрПроизводитель and СпрПр.IsMark = 0
inner join $Справочник.ГарантийныеТалоны СпрГТ (nolock) on СпрГТ.ID = $СпрПр.спрГарантийныйТалон and СпрГТ.IsMark = 0
union all
select
     ДокС.IDDoc,
     $ВидДокумента.ВозвратПоставщику,
     СпрГТ.ID,
     $Док.загСклад,
     0,
     $ДокС.табКоличествоЕд
from $ДокументСтроки.ВозвратПоставщику ДокС
inner join $Документ.ВозвратПоставщику Док on Док.IDDoc = ДокС.IDDoc
inner join _1sjourn j (nolock) on j.IDDoc = ДокС.IDDoc and j.Date_Time_Iddoc between :ДН and :ДК~ and j.Closed & 1 = 1
inner join $Справочник.Товары СпрТ (nolock) on СпрТ.ID = $ДокС.табТовар and СпрТ.IsMark = 0 and $СпрТ.спрПризнакГар = 1
inner join $Справочник.Производитель СпрПр (nolock) on СпрПр.ID = $СпрТ.спрПроизводитель and СпрПр.IsMark = 0
inner join $Справочник.ГарантийныеТалоны СпрГТ (nolock) on СпрГТ.ID = $СпрПр.спрГарантийныйТалон and СпрГТ.IsMark = 0
) БигС

State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'sp845'.

В DDS-нике написано, что это поле табТовар табличной части. в обоих доках такое есть.

Поставило в тупик то, что если из подзапроса убрать любой из юнионов, то РАБОТАЕТ Озадачен

При этом если построить второй юнион по другому документу (реквизиты почти те же самые), то ругается на другую таблицу. Если выбрать документ с другой структурой, например такая вторая часть юниона:

union all
select
     ДокС.IDDoc,
     $ВидДокумента.ИнвентаризацияТалонов,
     $ДокС.табТалон,
     $Док.загСклад,
     case when $ДокС.табФактическийОстаток - $ДокС.табУчетныйОстатокРег > 0 then $ДокС.табФактическийОстаток - $ДокС.табУчетныйОстатокРег else 0 end,
     case when $ДокС.табФактическийОстаток - $ДокС.табУчетныйОстатокРег > 0 then 0 else $ДокС.табУчетныйОстатокРег - $ДокС.табФактическийОстаток end
from $ДокументСтроки.ИнвентаризацияТалонов ДокС (nolock)
inner join $Документ.ИнвентаризацияТалонов Док (nolock) on Док.IDDoc = ДокС.IDDoc
inner join _1sjourn j (nolock) on j.IDDoc = ДокС.IDDoc and j.Date_Time_Iddoc between :ДН and :ДК~ and j.Closed & 1 = 1
where $ДокС.табФактическийОстаток <> $ДокС.табУчетныйОстатокРег

, то говорит Meta name parser error: поле таблицы не найдено "$ДокС.табКоличествоЕд". Это поле описано в первой части юниона и оно у дока есть Озадачен

Опять же поодиночке все работет... Если это знаки препинания, то поодиночке б ругалось...  Озадачен Что за ___? Неужели наложение таблиц какое. уж даж NOLOCK'и у строк документа убирал, не помогло (((

Люди, мож кто встречался с энтим.... где копать то?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Юнион не работает
Ответ #1 - 11. Февраля 2009 :: 12:03
Печать  
Не используй одинаковый алиас для разных метаимен таблиц в одном запросе.
В твоем случае это
$ДокументСтроки.ВозвратПокупателя ДокС
$ДокументСтроки.ВозвратПоставщику ДокС
  

1&&2&&3
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Юнион не работает
Ответ #2 - 11. Февраля 2009 :: 12:14
Печать  
А так не лучше?
Код
Выбрать все
select
     БигС.Док [Док $Документ],
     max(БигС.ДокВид) Док_вид,
     СпрГТ.id [Талон $Справочник.ГарантийныеТалоны],
     БигС.Скл [Склад $Справочник.Склады],
     sum(БигС.ПрихД) [ПрихД $число],
     sum(БигС.РасхД) [РасхД $число]
from
(
select
     j.IDDoc Док,
     j.iddocdef ДокВид,
     $ДокС.табТовар Тов,
     $Док.загСклад Скл,
     $ДокС.табКоличествоЕд ПрихД,
     0 РасхД
from $ДокументСтроки.ВозвратПокупателя ДокС
inner join $Документ.ВозвратПокупателя Док (nolock) on Док.IDDoc = ДокС.IDDoc
inner join _1sjourn j (nolock) on j.IDDoc = ДокС.IDDoc and j.Date_Time_Iddoc between :ДН and :ДК~ and j.Closed = 1
union all
select
     j.IDDoc,
     j.iddocdef,
     $ДокС1.табТовар,
     $Док1.загСклад,
     0,
     $ДокС1.табКоличествоЕд
from $ДокументСтроки.ВозвратПоставщику ДокС1
inner join $Документ.ВозвратПоставщику Док1 (nolock) on Док1.IDDoc = ДокС1.IDDoc
inner join _1sjourn j (nolock) on j.IDDoc = ДокС1.IDDoc and j.Date_Time_Iddoc between :ДН and :ДК~ and j.Closed = 1
) БигС
inner join $Справочник.Товары СпрТ (nolock) on СпрТ.ID = БигС.Тов and $СпрТ.спрПризнакГар = 1
inner join $Справочник.Производитель СпрПр (nolock) on СпрПр.ID = $СпрТ.спрПроизводитель and СпрПр.IsMark = 0
inner join $Справочник.ГарантийныеТалоны СпрГТ (nolock) on СпрГТ.ID = $СпрПр.спрГарантийныйТалон and СпрГТ.IsMark = 0
group by БигС.Док, СпрГТ.id, БигС.Скл 

  
Наверх
 
IP записан
 
Inner Join (c)
Junior Member
**
Отсутствует


I Love BaBB 2!

Сообщений: 23
Зарегистрирован: 15. Октября 2008
Пол: Мужской
Re: Юнион не работает
Ответ #3 - 11. Февраля 2009 :: 17:59
Печать  
trad, U_zer спасибо. Попробую. Если что, отпишусь.

Запрос строю программно со счетчиком, так что вариант запроса U_zer'а то что надо.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать