Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема LEFT JOIN - а отрабатывает как INNER JOIN :-( (число прочтений - 1938 )
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
LEFT JOIN - а отрабатывает как INNER JOIN :-(
26. Ноября 2007 :: 22:06
Печать  
Все добрый день!
Суть задачи - помесячное получение сумм Балансовой стоимости и амортизации по основным средствам.
Вот что изобразил (вообще то запрос формируется динамически)
Код
Выбрать все
Select
 ИтЗапрос.СтавкаНалогаНаИмущество СтавкаНалогаНаИмущество
,ИтЗапрос.СчетУчета [Счет $Счет.ЕПСБУ]
,ИтЗапрос.ОсновноеСредство [ОсновноеСредство $Справочник.ОсновныеСредства]
, SUM(ИтЗапрос.Стоимость_1) Стоимость_1
, SUM(ИтЗапрос.СтоимостьА_1) СтоимостьА_1
From
(--Выборка по месяцам
Select
 ОтборСубконто.ACCID as СчетУчета
,ОтборСубконто.SC2 as ОсновноеСредство
,ОтборСубконто.VSC2 as ВидСубконтоОС
,ОтборСубконто.SC0 as КБКУчета
,(
select top 1
left(c13329_vv.value, 9)
from
_1sconst as c13329_vv (nolock)
where
c13329_vv.id = 13329 and
c13329_vv.objid = СпрОс.ID and
(c13329_vv.date <= '20070101')
order by c13329_vv.date desc, c13329_vv.time desc, c13329_vv.docid desc, c13329_vv.row_id desc
) as СостояниеОС
,(
select top 1
cast(c13339_vv.value as numeric(4, 2))
from
_1sconst as c13339_vv (nolock)
where
c13339_vv.id = 13339 and
c13339_vv.objid = СпрОс.ID and
(c13339_vv.date <= '20070101')
order by c13339_vv.date desc, c13339_vv.time desc, c13339_vv.docid desc, c13339_vv.row_id desc
) as СтавкаНалогаНаИмущество
,СпрОс.sp13341 as АмортизационнаяГруппа
,СпрМХ.sp13229 as МОЛ
,СпрМХ.sp13230 as Подразделение
,(ОтборСубконто.SD) as Стоимость_1
,(ОтборСубконтоА.SD) as СтоимостьА_1
From _1SBKTTL as ОтборСубконто
LEFT JOIN
_1SBKTTL as ОтборСубконтоА
On
(ОтборСубконтоА.SC2 = ОтборСубконто.SC2) AND (ОтборСубконтоА.VSC2 = ОтборСубконто.VSC2) AND (ОтборСубконтоА.DATE = ОтборСубконто.DATE)
INNER JOIN
sc13357 СпрОс ON
(СпрОс.ID = ОтборСубконто.SC2)
INNER JOIN
sc528 as СпрМХ
ON
(СпрМх.ID = ОтборСубконто.SC3)
INNER JOIN
_1SACCS as ПланСчетов
On
(ПланСчетов.ID = ОтборСубконто.ACCID)
Where
(ОтборСубконто.VSC2 = 467) AND
(ОтборСубконто.KIND=1) AND
(ОтборСубконтоА.KIND=1) AND
(ОтборСубконтоА.ACCID in (Select Val From #СчетаАмортизации)) AND
(ОтборСубконто.DATE = '20070101')
AND (СпрОС.ID in (Select Val From #ОсновныеСредства_1))) as ИтЗапрос
Group By ИтЗапрос.СтавкаНалогаНаИмущество,ИтЗапрос.СчетУчета,ИтЗапрос.ОсновноеСредство 



Так вот на соединении с таблицей ОтборСубконтоА (для расчета амортизации) если амортизации нет вообще никакой - то в итоговый Select ничего не попадает. Кстати - счет учета амортизации есть в справочнике основных средств - но я че-т не могу понять как его привязать к таблице ОтборСубконтоА.
Подскажите - в чем я не прав?


и Второй вопрос:
В подзапросе используется виртуальная таблица $ПоследнееЗначение как правильно на него наложить фильтр - нужно ли оборачивать в еще один Select?
(Пока сделал $ПоследнееЗначение(....) in (Select Val From #СзФильтра) )
Огромное спасибо!!!
  
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: LEFT JOIN - а отрабатывает как INNER JOIN :-(
Ответ #1 - 26. Ноября 2007 :: 22:13
Печать  
А если убрать его - попадает? Если убрать условия на него?
Обычно попадает пустота фпринципе Улыбка
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: LEFT JOIN - а отрабатывает как INNER JOIN :-(
Ответ #2 - 27. Ноября 2007 :: 05:59
Печать  
если убрать его (LEFT JOIN) - попадает; если убрать условия - то ОтборСубконто.СуммаОстаток_1 = ОтборСубконтоА.СуммаОстатокА_1
  
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: LEFT JOIN - а отрабатывает как INNER JOIN :-(
Ответ #3 - 27. Ноября 2007 :: 07:00
Печать  
leshik писал(а) 26. Ноября 2007 :: 22:06:
если амортизации нет вообще никакой - то в итоговый Select ничего не попадает

не попадает из-за этих строк:
Код
Выбрать все
(ОтборСубконтоА.KIND=1) AND
(ОтборСубконтоА.ACCID in (Select Val From #СчетаАмортизации)) AND 


т.к. KIND и ACCID в случае отсутствия аммортизации - is null.
смотри в сторону вункции isnull()
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: LEFT JOIN - а отрабатывает как INNER JOIN :-(
Ответ #4 - 27. Ноября 2007 :: 07:01
Печать  
пример
isnull(ОтборСубконтоА.KIND,1)=1
  

1&&2&&3
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: LEFT JOIN - а отрабатывает как INNER JOIN :-(
Ответ #5 - 27. Ноября 2007 :: 10:29
Печать  
Код
Выбрать все
(isnull(ОтборСубконтоА.KIND,1)=1) AND
(isnull(ОтборСубконтоА.ACCID,:ВыбСчетАмортизации) in (Select Val From #СчетаАмортизации))
 


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