Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) по join -разъясните пожалуйста   (число прочтений - 3148 )
g00d
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
по join -разъясните пожалуйста  
05. Июля 2008 :: 23:26
Печать  
есть такой запрос в БИ 1с с использованием компоненты AccountsRecordSet
сервер mssql 2000
запрос составлен с использованием мета парсера

|select спр.ID
| , Sum(Бюджет.СуммаОборот)
| , Sum(Основной.СуммаОборот)
| FROM "+_Tree+" AS спр (NOLOCK)
| LEFT JOIN $БИОборотыДтКт.Бюджетный(:НачДата, :КонДата ~, ,
| , (СчетДт in (select val from #ВыбСчет))
| , , , ,"+?(ОтбПодр=1,"(РазделительУчета =:Подразд)","")+" ) AS Бюджет
| ON Бюджет.СубконтоДт1 = спр.ID
| LEFT JOIN $БИОборотыДтКт.Основной(:НачДата, :КонДата ~, ,
| , (СчетДт in (select val from #ВыбСчет))
| , , , ,"+?(ОтбПодр=1,"(РазделительУчета =:Подразд)","")+" ) AS Основной
| ON Основной.СубконтоДт1 = спр.ID
|GROUP BY
| спр.ID
|"+?(НеНул=1,"having (Sum(Основной.СуммаОборот)<>0) or (Sum(Бюджет.СуммаОборот)<>0)","")+"
|ORDER BY
| спр.ID


вопрос следующий
такой запрос выдает результаты только при оборота и по Бюджет и по Основной одновремено
при убирании второго соединения все ок...
а мне нужно что бы в результаты попадали обороты по какому либо соединению
с ориентируйте пожалуйста
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: по join -разъясните пожалуйста  
Ответ #1 - 06. Июля 2008 :: 03:52
Печать  
Код
Выбрать все
|"+?(НеНул=1,"having (Sum(Основной.СуммаОборот)<>0) or (Sum(Бюджет.СуммаОборот)<>0)","")+"  


я думаю надо убрать вот это
  
Наверх
IP записан
 
g00d
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: по join -разъясните пожалуйста  
Ответ #2 - 06. Июля 2008 :: 07:53
Печать  
leshik писал(а) 06. Июля 2008 :: 03:52:
Код
Выбрать все
|"+?(НеНул=1,"having (Sum(Основной.СуммаОборот)<>0) or (Sum(Бюджет.СуммаОборот)<>0)","")+"  


я думаю надо убрать вот это

без having  он отображает все но без итоговов, т
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: по join -разъясните пожалуйста  
Ответ #3 - 06. Июля 2008 :: 07:56
Печать  
я вот более подробно посмотрел - а зачем summ вообще использовать?
если будет какой-нить итоги из ВТ Бухитогов то он и отразится при левом соединении.
  
Наверх
IP записан
 
g00d
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: по join -разъясните пожалуйста  
Ответ #4 - 06. Июля 2008 :: 08:14
Печать  
leshik писал(а) 06. Июля 2008 :: 07:56:
я вот более подробно посмотрел - а зачем summ вообще использовать?
если будет какой-нить итоги из ВТ Бухитогов то он и отразится при левом соединении.

общая суть запроса делает запросов в справочник затрат
и по каждой статье нужно получить оборот по плану счетов основной и оборот по блану счетов Бюджетный
если я в запросе делаю только одно присоединение то получаю все обороты по присоединяему плану счетов
если оба то получаю только те обороты которые были и по плану счетов основной и по плану счетов Бюджетный
sum используется для группировок...  по статьям затрат
приведение запроса к такому виду ничего не изменило
     |select   спр.ID
     |            , Бюджет.СуммаОборот
     |            , Основной.СуммаОборот
     |            FROM "+_Tree+" AS спр (NOLOCK)
    |             left JOIN  $БИОборотыДтКт.Бюджетный(:НачДата, :КонДата ~,  ,
     |                              , (СчетДт in (select val from #ВыбСчет))
     |                              , , , ,"+?(ОтбПодр=1,"(РазделительУчета =:Подразд)","")+"       ) AS Бюджет
     |                        ON Бюджет.СубконтоДт1 = спр.ID            
    |              left JOIN  $БИОборотыДтКт.Основной(:НачДата, :КонДата ~,  ,
     |                              , (СчетДт in (select val from #ВыбСчет))
     |                              , , , ,"+?(ОтбПодр=1,"(РазделительУчета =:Подразд)","")+"       ) AS Основной
     |                        ON Основной.СубконтоДт1 = спр.ID            
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: по join -разъясните пожалуйста  
Ответ #5 - 06. Июля 2008 :: 10:27
Печать  
то что смог понять из сабжа...
вместо left JOIN - union all
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
g00d
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: по join -разъясните пожалуйста  
Ответ #6 - 06. Июля 2008 :: 16:11
Печать  
Цитата:
то что смог понять из сабжа...
вместо left JOIN - union all

сделал через врем.таблицу и два инсерт запроса
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: по join -разъясните пожалуйста  
Ответ #7 - 06. Июля 2008 :: 18:23
Печать  
Хозяин-барин  Улыбка
  

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


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: по join -разъясните пожалуйста  
Ответ #8 - 06. Июля 2008 :: 19:15
Печать  
g00d писал(а) 06. Июля 2008 :: 08:14:
sum используется для группировок...  по статьям затрат

Для этого эффективнее использовать соответствующие секции ВТ.

А по исходному вопросу
Код
Выбрать все
having (isnull(Sum(Основной.СуммаОборот),0)<>0) or (isnull(Sum(Бюджет.СуммаОборот),0)<>0) 

  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
g00d
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: по join -разъясните пожалуйста  
Ответ #9 - 06. Июля 2008 :: 19:15
Печать  
Цитата:
Хозяин-барин  Улыбка

да времени не особо много было разбираться вот и пошел по пути наименьшего сопротивления Подмигивание
  
Наверх
 
IP записан
 
g00d
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: по join -разъясните пожалуйста  
Ответ #10 - 06. Июля 2008 :: 19:17
Печать  
berezdetsky писал(а) 06. Июля 2008 :: 19:15:
g00d писал(а) 06. Июля 2008 :: 08:14:
sum используется для группировок...  по статьям затрат

Для этого эффективнее использовать соответствующие секции ВТ.

А по исходному вопросу
Код
Выбрать все
having (isnull(Sum(Основной.СуммаОборот),0)<>0) or (isnull(Sum(Бюджет.СуммаОборот),0)<>0) 


а Вам я хочу сказать огромное спасибо за этот класс...
настоящая палочка выручалочка...
РЕСПЕКТ
  
Наверх
 
IP записан
 
g00d
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: по join -разъясните пожалуйста  
Ответ #11 - 06. Июля 2008 :: 19:24
Печать  
2 berezdetsky

и еще в 1с есть маленький баг в виде ограничения длины в сообщить по моему в 255 символов ...
и можно попросить что при включенной отладке debug(1) и при превышении длины в 255 символов
текст выводился не одной а несколькими сообщениями...
актуально в длинных запросах
мелочь но приятная
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: по join -разъясните пожалуйста  
Ответ #12 - 06. Июля 2008 :: 19:42
Печать  
AccountsRecordset не переопределяет английские синонимы, так что debug(1) обрабатывается базовым ODBCRecordset. Используй Отладка(2) - там запрос выводится переразбитый на строки по границам " AND " составных условий. Если этого будет недостаточно, раскомментируй кусок кода в методе МетаПарсер - тогда текст будет делиться на строки по 250 символов.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
g00d
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: по join -разъясните пожалуйста  
Ответ #13 - 06. Июля 2008 :: 20:02
Печать  
berezdetsky писал(а) 06. Июля 2008 :: 19:42:
AccountsRecordset не переопределяет английские синонимы, так что debug(1) обрабатывается базовым ODBCRecordset. Используй Отладка(2) - там запрос выводится переразбитый на строки по границам " AND " составных условий. Если этого будет недостаточно, раскомментируй кусок кода в методе МетаПарсер - тогда текст будет делиться на строки по 250 символов.

спасибо буду иметь ввиду
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: по join -разъясните пожалуйста  
Ответ #14 - 07. Июля 2008 :: 03:20
Печать  
g00d писал(а) 06. Июля 2008 :: 19:24:
2 berezdetsky

и еще в 1с есть маленький баг в виде ограничения длины в сообщить по моему в 255 символов ...
и можно попросить что при включенной отладке debug(1) и при превышении длины в 255 символов
текст выводился не одной а несколькими сообщениями...
актуально в длинных запросах
мелочь но приятная

Юзай Перехватчик в 1С++, он кардинально решил проблему подобного ограничения, только не в 255, а больше - 460 и т.д.
Почитай доку.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать