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


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Удваивание результатов (union all)
18. Августа 2008 :: 06:19
Печать  
есть запрос

     ТекстЗапроса = "
     |SET NOCOUNT ON
     | select   
     |        Бюджет.СубконтоДт1 [СубконтоДт1 $Субконто]
     |      , Бюджет.СубконтоДт1_вид
     |      , Бюджет.СуммаОборот as План
     |      , 0  as Факт
     | FROM $БИОборотыДтКт.Бюджетный(:НачДата, :КонДата ~,  ,
     |            , "+?(СпСчетовДт.GetListSize()>0,"(СчетДт in (select val from #СпСчетовДтБ))","")+"
     |            , , "+?(СпСчетовКт.GetListSize()>0,"(СчетКт in (select val from #СпСчетовКтБ))","")+"
     |            , , (СубконтоКт1 is not null or СубконтоДт1 is not null )  "+?(ОтбПодр=1," and (РазделительУчета =:Подразд)","")+" ) AS Бюджет
     |union all
     |
     | select   
     |        Основной.СубконтоДт1 [СубконтоДт1 $Субконто]
     |      , Основной.СубконтоДт1_вид
     |      , 0 as План
     |      , Основной.СуммаОборот as Факт
     | FROM $БИОборотыДтКт.Основной(:НачДата, :КонДата ~,  ,
     |                              , "+?(СпСчетовДт.GetListSize()>0,"(СчетДт in (select val from #СпСчетовДтО))","")+"
     |                              , , "+?(СпСчетовКт.GetListSize()>0,"(СчетКт in (select val from #СпСчетовКтО))","")+"
     |                              , , (СубконтоКт1 is not null or СубконтоДт1 is not null ) "+?(ОтбПодр=1," and (РазделительУчета =:Подразд)","")+" ) AS Основной
     |
     |";            

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


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: Удваивание результатов (union all)
Ответ #1 - 18. Августа 2008 :: 06:23
Печать  
g00d писал(а) 18. Августа 2008 :: 06:19:
если отключаю отбор по счетам или убираю присоединяемый запрос - то все ок результаты достоверные
но одновременно результаты запроса начинают удваиваться
куда копать *?


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


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Удваивание результатов (union all)
Ответ #2 - 18. Августа 2008 :: 06:31
Печать  
Выложи ещё результаты отладки, посмотрю вечером.


OFF: Если во временных таблицах только элементы счетов, эти условия эффективнее задавать в секции Условие.
  

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


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: Удваивание результатов (union all)
Ответ #3 - 18. Августа 2008 :: 07:12
Печать  
berezdetsky писал(а) 18. Августа 2008 :: 06:31:
Выложи ещё результаты отладки, посмотрю вечером.


OFF: Если во временных таблицах только элементы счетов, эти условия эффективнее задавать в секции Условие.

версия AccountsRecordSet 2.6

это дебаг учетверяющего запроса
Код
Выбрать все
SET NOCOUNT ON
 select
 	  Бюджет.СубконтоДт1 [СубконтоДт1 $Субконто]
 	, Бюджет.СубконтоДт1_вид
	, Бюджет.СуммаОборот as План
	, 0  as Факт
 FROM (SELECT РазделительУчета
	, Валюта
	, СчетДт
	, СчетКт
	, СубконтоДт1, СубконтоДт1_вид, СубконтоДт2, СубконтоДт2_вид, СубконтоДт3, СубконтоДт3_вид, СубконтоКт1, СубконтоКт1_вид, СубконтоКт2, СубконтоКт2_вид, СубконтоКт3, СубконтоКт3_вид
	, Sum(СуммаОборот) СуммаОборот
	, Sum(ВалютнаяСуммаОборот) ВалютнаяСуммаОборот
	, Sum(КоличествоОборот) КоличествоОборот

FROM (
	SELECT _1SENTRY_vt.SP5124 РазделительУчета
		, _1SENTRY_vt.CURRID Валюта
		, _1SENTRY_vt.ACCDTID СчетДт
		, _1SENTRY_vt.ACCKTID СчетКт
		, _1SENTRY_vt.DTSC0 СубконтоДт1, _1SENTRY_vt.VDTSC0 СубконтоДт1_вид, _1SENTRY_vt.DTSC1 СубконтоДт2, _1SENTRY_vt.VDTSC1 СубконтоДт2_вид, _1SENTRY_vt.DTSC2 СубконтоДт3, _1SENTRY_vt.VDTSC2 СубконтоДт3_вид, _1SENTRY_vt.KTSC0 СубконтоКт1, _1SENTRY_vt.VKTSC0 СубконтоКт1_вид, _1SENTRY_vt.KTSC1 СубконтоКт2, _1SENTRY_vt.VKTSC1 СубконтоКт2_вид, _1SENTRY_vt.KTSC2 СубконтоКт3, _1SENTRY_vt.VKTSC2 СубконтоКт3_вид
		, _1SENTRY_vt.SUM_ СуммаОборот
		, _1SENTRY_vt.CURSUM ВалютнаяСуммаОборот
		, _1SENTRY_vt.AMOUNT КоличествоОборот

	FROM _1SENTRY AS _1SENTRY_vt (NOLOCK)
		INNER JOIN _1SACCS AS _1SACCS_dt_vt (NOLOCK) ON (_1SENTRY_vt.ACCDTID = _1SACCS_dt_vt.ID)
		INNER JOIN _1SACCS AS sq_dt_vt (NOLOCK) ON (_1SACCS_dt_vt.SCHKOD >= sq_dt_vt.SCHKOD) AND (Left(_1SACCS_dt_vt.SCHKOD, Len(sq_dt_vt.SCHKOD)) = sq_dt_vt.SCHKOD) AND (_1SACCS_dt_vt.PLANID = 6510) AND ((sq_dt_vt.ID in (select val from #СпСчетовДтБ)))
		INNER JOIN _1SACCS AS _1SACCS_kt_vt (NOLOCK) ON (_1SENTRY_vt.ACCKTID = _1SACCS_kt_vt.ID)
		INNER JOIN _1SACCS AS sq_kt_vt (NOLOCK) ON (_1SACCS_kt_vt.SCHKOD >= sq_kt_vt.SCHKOD) AND (Left(_1SACCS_kt_vt.SCHKOD, Len(sq_kt_vt.SCHKOD)) = sq_kt_vt.SCHKOD) AND (_1SACCS_kt_vt.PLANID = 6510) AND ((sq_kt_vt.ID in (select val from #СпСчетовКтБ)))

	WHERE (_1SENTRY_vt.ACTIVE = ' ')
		AND (_1SENTRY_vt.PLANID = 6510)
		AND (_1SENTRY_vt.PROVKIND = ' ')
AND ((_1SENTRY_vt.KTSC0 is not null or _1SENTRY_vt.DTSC0 is not null )) AND (_1SENTRY_vt.DATE_TIME_DOCID Between '20080801' AND '20080818Z')
) sq_vt
GROUP BY РазделительУчета, СчетДт, СчетКт, Валюта, СубконтоДт1, СубконтоДт1_вид, СубконтоДт2, СубконтоДт2_вид, СубконтоДт3, СубконтоДт3_вид, СубконтоКт1, СубконтоКт1_вид, СубконтоКт2, СубконтоКт2_вид, СубконтоКт3, СубконтоКт3_вид
HAVING (Sum(СуммаОборот) <> 0)
	OR (Sum(ВалютнаяСуммаОборот) <> 0)
	OR (Sum(КоличествоОборот) <> 0)
) AS Бюджет
union all

 select
 	  Основной.СубконтоДт1 [СубконтоДт1 $Субконто]
 	, Основной.СубконтоДт1_вид
	, 0 as План
	, Основной.СуммаОборот as Факт
 FROM (SELECT РазделительУчета
	, Валюта
	, СчетДт
	, СчетКт
	, СубконтоДт1, СубконтоДт1_вид, СубконтоДт2, СубконтоДт2_вид, СубконтоДт3, СубконтоДт3_вид, СубконтоКт1, СубконтоКт1_вид, СубконтоКт2, СубконтоКт2_вид, СубконтоКт3, СубконтоКт3_вид
	, Sum(СуммаОборот) СуммаОборот
	, Sum(ВалютнаяСуммаОборот) ВалютнаяСуммаОборот
	, Sum(КоличествоОборот) КоличествоОборот

FROM (
	SELECT _1SENTRY_vt.SP5124 РазделительУчета
		, _1SENTRY_vt.CURRID Валюта
		, _1SENTRY_vt.ACCDTID СчетДт
		, _1SENTRY_vt.ACCKTID СчетКт
		, _1SENTRY_vt.DTSC0 СубконтоДт1, _1SENTRY_vt.VDTSC0 СубконтоДт1_вид, _1SENTRY_vt.DTSC1 СубконтоДт2, _1SENTRY_vt.VDTSC1 СубконтоДт2_вид, _1SENTRY_vt.DTSC2 СубконтоДт3, _1SENTRY_vt.VDTSC2 СубконтоДт3_вид, _1SENTRY_vt.KTSC0 СубконтоКт1, _1SENTRY_vt.VKTSC0 СубконтоКт1_вид, _1SENTRY_vt.KTSC1 СубконтоКт2, _1SENTRY_vt.VKTSC1 СубконтоКт2_вид, _1SENTRY_vt.KTSC2 СубконтоКт3, _1SENTRY_vt.VKTSC2 СубконтоКт3_вид
		, _1SENTRY_vt.SUM_ СуммаОборот
		, _1SENTRY_vt.CURSUM ВалютнаяСуммаОборот
		, _1SENTRY_vt.AMOUNT КоличествоОборот

	FROM _1SENTRY AS _1SENTRY_vt (NOLOCK)
		INNER JOIN _1SACCS AS _1SACCS_dt_vt (NOLOCK) ON (_1SENTRY_vt.ACCDTID = _1SACCS_dt_vt.ID)
		INNER JOIN _1SACCS AS sq_dt_vt (NOLOCK) ON (_1SACCS_dt_vt.SCHKOD >= sq_dt_vt.SCHKOD) AND (Left(_1SACCS_dt_vt.SCHKOD, Len(sq_dt_vt.SCHKOD)) = sq_dt_vt.SCHKOD) AND (_1SACCS_dt_vt.PLANID = 2444) AND ((sq_dt_vt.ID in (select val from #СпСчетовДтО)))
		INNER JOIN _1SACCS AS _1SACCS_kt_vt (NOLOCK) ON (_1SENTRY_vt.ACCKTID = _1SACCS_kt_vt.ID)
		INNER JOIN _1SACCS AS sq_kt_vt (NOLOCK) ON (_1SACCS_kt_vt.SCHKOD >= sq_kt_vt.SCHKOD) AND (Left(_1SACCS_kt_vt.SCHKOD, Len(sq_kt_vt.SCHKOD)) = sq_kt_vt.SCHKOD) AND (_1SACCS_kt_vt.PLANID = 2444) AND ((sq_kt_vt.ID in (select val from #СпСчетовКтО)))

	WHERE (_1SENTRY_vt.ACTIVE = ' ')
		AND (_1SENTRY_vt.PLANID = 2444)
		AND (_1SENTRY_vt.PROVKIND = ' ')
AND ((_1SENTRY_vt.KTSC0 is not null or _1SENTRY_vt.DTSC0 is not null )) AND (_1SENTRY_vt.DATE_TIME_DOCID Between '20080801' AND '20080818Z')
) sq_vt
GROUP BY РазделительУчета, СчетДт, СчетКт, Валюта, СубконтоДт1, СубконтоДт1_вид, СубконтоДт2, СубконтоДт2_вид, СубконтоДт3, СубконтоДт3_вид, СубконтоКт1, СубконтоКт1_вид, СубконтоКт2, СубконтоКт2_вид, СубконтоКт3, СубконтоКт3_вид
HAVING (Sum(СуммаОборот) <> 0)
	OR (Sum(ВалютнаяСуммаОборот) <> 0)
	OR (Sum(КоличествоОборот) <> 0)
) AS Основной

 



  
Наверх
 
IP записан
 
g00d
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: Удваивание результатов (union all)
Ответ #4 - 18. Августа 2008 :: 07:13
Печать  
а этот с нормальными итогами (но с отключенными отборами по счетам)
Код
Выбрать все
SET NOCOUNT ON
 select
 	  Бюджет.СубконтоДт1 [СубконтоДт1 $Субконто]
 	, Бюджет.СубконтоДт1_вид
	, Бюджет.СуммаОборот as План
	, 0  as Факт
 FROM (SELECT РазделительУчета
	, Валюта
	, СчетДт
	, СчетКт
	, СубконтоДт1, СубконтоДт1_вид, СубконтоДт2, СубконтоДт2_вид, СубконтоДт3, СубконтоДт3_вид, СубконтоКт1, СубконтоКт1_вид, СубконтоКт2, СубконтоКт2_вид, СубконтоКт3, СубконтоКт3_вид
	, Sum(СуммаОборот) СуммаОборот
	, Sum(ВалютнаяСуммаОборот) ВалютнаяСуммаОборот
	, Sum(КоличествоОборот) КоличествоОборот

FROM (
	SELECT _1SENTRY_vt.SP5124 РазделительУчета
		, _1SENTRY_vt.CURRID Валюта
		, _1SENTRY_vt.ACCDTID СчетДт
		, _1SENTRY_vt.ACCKTID СчетКт
		, _1SENTRY_vt.DTSC0 СубконтоДт1, _1SENTRY_vt.VDTSC0 СубконтоДт1_вид, _1SENTRY_vt.DTSC1 СубконтоДт2, _1SENTRY_vt.VDTSC1 СубконтоДт2_вид, _1SENTRY_vt.DTSC2 СубконтоДт3, _1SENTRY_vt.VDTSC2 СубконтоДт3_вид, _1SENTRY_vt.KTSC0 СубконтоКт1, _1SENTRY_vt.VKTSC0 СубконтоКт1_вид, _1SENTRY_vt.KTSC1 СубконтоКт2, _1SENTRY_vt.VKTSC1 СубконтоКт2_вид, _1SENTRY_vt.KTSC2 СубконтоКт3, _1SENTRY_vt.VKTSC2 СубконтоКт3_вид
		, _1SENTRY_vt.SUM_ СуммаОборот
		, _1SENTRY_vt.CURSUM ВалютнаяСуммаОборот
		, _1SENTRY_vt.AMOUNT КоличествоОборот

	FROM _1SENTRY AS _1SENTRY_vt (NOLOCK)

	WHERE (_1SENTRY_vt.ACTIVE = ' ')
		AND (_1SENTRY_vt.PLANID = 6510)
		AND (_1SENTRY_vt.PROVKIND = ' ')
AND ((_1SENTRY_vt.KTSC0 is not null or _1SENTRY_vt.DTSC0 is not null )) AND (_1SENTRY_vt.DATE_TIME_DOCID Between '20080801' AND '20080818Z')
) sq_vt
GROUP BY РазделительУчета, СчетДт, СчетКт, Валюта, СубконтоДт1, СубконтоДт1_вид, СубконтоДт2, СубконтоДт2_вид, СубконтоДт3, СубконтоДт3_вид, СубконтоКт1, СубконтоКт1_вид, СубконтоКт2, СубконтоКт2_вид, СубконтоКт3, СубконтоКт3_вид
HAVING (Sum(СуммаОборот) <> 0)
	OR (Sum(ВалютнаяСуммаОборот) <> 0)
	OR (Sum(КоличествоОборот) <> 0)
) AS Бюджет
union all

 select
 	  Основной.СубконтоДт1 [СубконтоДт1 $Субконто]
 	, Основной.СубконтоДт1_вид
	, 0 as План
	, Основной.СуммаОборот as Факт
 FROM (SELECT РазделительУчета
	, Валюта
	, СчетДт
	, СчетКт
	, СубконтоДт1, СубконтоДт1_вид, СубконтоДт2, СубконтоДт2_вид, СубконтоДт3, СубконтоДт3_вид, СубконтоКт1, СубконтоКт1_вид, СубконтоКт2, СубконтоКт2_вид, СубконтоКт3, СубконтоКт3_вид
	, Sum(СуммаОборот) СуммаОборот
	, Sum(ВалютнаяСуммаОборот) ВалютнаяСуммаОборот
	, Sum(КоличествоОборот) КоличествоОборот

FROM (
	SELECT _1SENTRY_vt.SP5124 РазделительУчета
		, _1SENTRY_vt.CURRID Валюта
		, _1SENTRY_vt.ACCDTID СчетДт
		, _1SENTRY_vt.ACCKTID СчетКт
		, _1SENTRY_vt.DTSC0 СубконтоДт1, _1SENTRY_vt.VDTSC0 СубконтоДт1_вид, _1SENTRY_vt.DTSC1 СубконтоДт2, _1SENTRY_vt.VDTSC1 СубконтоДт2_вид, _1SENTRY_vt.DTSC2 СубконтоДт3, _1SENTRY_vt.VDTSC2 СубконтоДт3_вид, _1SENTRY_vt.KTSC0 СубконтоКт1, _1SENTRY_vt.VKTSC0 СубконтоКт1_вид, _1SENTRY_vt.KTSC1 СубконтоКт2, _1SENTRY_vt.VKTSC1 СубконтоКт2_вид, _1SENTRY_vt.KTSC2 СубконтоКт3, _1SENTRY_vt.VKTSC2 СубконтоКт3_вид
		, _1SENTRY_vt.SUM_ СуммаОборот
		, _1SENTRY_vt.CURSUM ВалютнаяСуммаОборот
		, _1SENTRY_vt.AMOUNT КоличествоОборот

	FROM _1SENTRY AS _1SENTRY_vt (NOLOCK)

	WHERE (_1SENTRY_vt.ACTIVE = ' ')
		AND (_1SENTRY_vt.PLANID = 2444)
		AND (_1SENTRY_vt.PROVKIND = ' ')
AND ((_1SENTRY_vt.KTSC0 is not null or _1SENTRY_vt.DTSC0 is not null )) AND (_1SENTRY_vt.DATE_TIME_DOCID Between '20080801' AND '20080818Z')
) sq_vt
GROUP BY РазделительУчета, СчетДт, СчетКт, Валюта, СубконтоДт1, СубконтоДт1_вид, СубконтоДт2, СубконтоДт2_вид, СубконтоДт3, СубконтоДт3_вид, СубконтоКт1, СубконтоКт1_вид, СубконтоКт2, СубконтоКт2_вид, СубконтоКт3, СубконтоКт3_вид
HAVING (Sum(СуммаОборот) <> 0)
	OR (Sum(ВалютнаяСуммаОборот) <> 0)
	OR (Sum(КоличествоОборот) <> 0)
) AS Основной

 


  
Наверх
 
IP записан
 
g00d
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: Удваивание результатов (union all)
Ответ #5 - 18. Августа 2008 :: 07:57
Печать  
а этот с включенным отбором только по счетуДт
удваивает результаты
Код
Выбрать все
SET NOCOUNT ON
 select  
 	  Бюджет.СубконтоДт1 [СубконтоДт1 $Субконто]
 	, Бюджет.СубконтоДт1_вид
	, Бюджет.СуммаОборот as План
	, 0  as Факт
 FROM (SELECT РазделительУчета
	, Валюта
	, СчетДт
	, СчетКт
	, СубконтоДт1, СубконтоДт1_вид, СубконтоДт2, СубконтоДт2_вид, СубконтоДт3, СубконтоДт3_вид, СубконтоКт1, СубконтоКт1_вид, СубконтоКт2, СубконтоКт2_вид, СубконтоКт3, СубконтоКт3_вид
	, Sum(СуммаОборот) СуммаОборот
	, Sum(ВалютнаяСуммаОборот) ВалютнаяСуммаОборот
	, Sum(КоличествоОборот) КоличествоОборот

FROM (
	SELECT _1SENTRY_vt.SP5124 РазделительУчета
		, _1SENTRY_vt.CURRID Валюта
		, _1SENTRY_vt.ACCDTID СчетДт
		, _1SENTRY_vt.ACCKTID СчетКт
		, _1SENTRY_vt.DTSC0 СубконтоДт1, _1SENTRY_vt.VDTSC0 СубконтоДт1_вид, _1SENTRY_vt.DTSC1 СубконтоДт2, _1SENTRY_vt.VDTSC1 СубконтоДт2_вид, _1SENTRY_vt.DTSC2 СубконтоДт3, _1SENTRY_vt.VDTSC2 СубконтоДт3_вид, _1SENTRY_vt.KTSC0 СубконтоКт1, _1SENTRY_vt.VKTSC0 СубконтоКт1_вид, _1SENTRY_vt.KTSC1 СубконтоКт2, _1SENTRY_vt.VKTSC1 СубконтоКт2_вид, _1SENTRY_vt.KTSC2 СубконтоКт3, _1SENTRY_vt.VKTSC2 СубконтоКт3_вид
		, _1SENTRY_vt.SUM_ СуммаОборот
		, _1SENTRY_vt.CURSUM ВалютнаяСуммаОборот
		, _1SENTRY_vt.AMOUNT КоличествоОборот

	FROM _1SENTRY AS _1SENTRY_vt (NOLOCK)
		INNER JOIN _1SACCS AS _1SACCS_dt_vt (NOLOCK) ON (_1SENTRY_vt.ACCDTID = _1SACCS_dt_vt.ID)
		INNER JOIN _1SACCS AS sq_dt_vt (NOLOCK) ON (_1SACCS_dt_vt.SCHKOD >= sq_dt_vt.SCHKOD) AND (Left(_1SACCS_dt_vt.SCHKOD, Len(sq_dt_vt.SCHKOD)) = sq_dt_vt.SCHKOD) AND (_1SACCS_dt_vt.PLANID = 6510) AND ((sq_dt_vt.ID in (select val from #СпСчетовДтБ)))

	WHERE (_1SENTRY_vt.ACTIVE = ' ')
		AND (_1SENTRY_vt.PLANID = 6510)
		AND (_1SENTRY_vt.PROVKIND = ' ')
AND ((_1SENTRY_vt.KTSC0 is not null or _1SENTRY_vt.DTSC0 is not null )) AND (_1SENTRY_vt.DATE_TIME_DOCID Between '20080801' AND '20080818Z')
) sq_vt
GROUP BY РазделительУчета, СчетДт, СчетКт, Валюта, СубконтоДт1, СубконтоДт1_вид, СубконтоДт2, СубконтоДт2_вид, СубконтоДт3, СубконтоДт3_вид, СубконтоКт1, СубконтоКт1_вид, СубконтоКт2, СубконтоКт2_вид, СубконтоКт3, СубконтоКт3_вид
HAVING (Sum(СуммаОборот) <> 0)
	OR (Sum(ВалютнаяСуммаОборот) <> 0)
	OR (Sum(КоличествоОборот) <> 0)
) AS Бюджет
union

 select  
 	  Основной.СубконтоДт1 [СубконтоДт1 $Субконто]
 	, Основной.СубконтоДт1_вид
	, 0 as План
	, Основной.СуммаОборот as Факт
 FROM (SELECT РазделительУчета
	, Валюта
	, СчетДт
	, СчетКт
	, СубконтоДт1, СубконтоДт1_вид, СубконтоДт2, СубконтоДт2_вид, СубконтоДт3, СубконтоДт3_вид, СубконтоКт1, СубконтоКт1_вид, СубконтоКт2, СубконтоКт2_вид, СубконтоКт3, СубконтоКт3_вид
	, Sum(СуммаОборот) СуммаОборот
	, Sum(ВалютнаяСуммаОборот) ВалютнаяСуммаОборот
	, Sum(КоличествоОборот) КоличествоОборот

FROM (
	SELECT _1SENTRY_vt.SP5124 РазделительУчета
		, _1SENTRY_vt.CURRID Валюта
		, _1SENTRY_vt.ACCDTID СчетДт
		, _1SENTRY_vt.ACCKTID СчетКт
		, _1SENTRY_vt.DTSC0 СубконтоДт1, _1SENTRY_vt.VDTSC0 СубконтоДт1_вид, _1SENTRY_vt.DTSC1 СубконтоДт2, _1SENTRY_vt.VDTSC1 СубконтоДт2_вид, _1SENTRY_vt.DTSC2 СубконтоДт3, _1SENTRY_vt.VDTSC2 СубконтоДт3_вид, _1SENTRY_vt.KTSC0 СубконтоКт1, _1SENTRY_vt.VKTSC0 СубконтоКт1_вид, _1SENTRY_vt.KTSC1 СубконтоКт2, _1SENTRY_vt.VKTSC1 СубконтоКт2_вид, _1SENTRY_vt.KTSC2 СубконтоКт3, _1SENTRY_vt.VKTSC2 СубконтоКт3_вид
		, _1SENTRY_vt.SUM_ СуммаОборот
		, _1SENTRY_vt.CURSUM ВалютнаяСуммаОборот
		, _1SENTRY_vt.AMOUNT КоличествоОборот

	FROM _1SENTRY AS _1SENTRY_vt (NOLOCK)
		INNER JOIN _1SACCS AS _1SACCS_dt_vt (NOLOCK) ON (_1SENTRY_vt.ACCDTID = _1SACCS_dt_vt.ID)
		INNER JOIN _1SACCS AS sq_dt_vt (NOLOCK) ON (_1SACCS_dt_vt.SCHKOD >= sq_dt_vt.SCHKOD) AND (Left(_1SACCS_dt_vt.SCHKOD, Len(sq_dt_vt.SCHKOD)) = sq_dt_vt.SCHKOD) AND (_1SACCS_dt_vt.PLANID = 2444) AND ((sq_dt_vt.ID in (select val from #СпСчетовДтО)))

	WHERE (_1SENTRY_vt.ACTIVE = ' ')
		AND (_1SENTRY_vt.PLANID = 2444)
		AND (_1SENTRY_vt.PROVKIND = ' ')
AND ((_1SENTRY_vt.KTSC0 is not null or _1SENTRY_vt.DTSC0 is not null )) AND (_1SENTRY_vt.DATE_TIME_DOCID Between '20080801' AND '20080818Z')
) sq_vt
GROUP BY РазделительУчета, СчетДт, СчетКт, Валюта, СубконтоДт1, СубконтоДт1_вид, СубконтоДт2, СубконтоДт2_вид, СубконтоДт3, СубконтоДт3_вид, СубконтоКт1, СубконтоКт1_вид, СубконтоКт2, СубконтоКт2_вид, СубконтоКт3, СубконтоКт3_вид
HAVING (Sum(СуммаОборот) <> 0)
	OR (Sum(ВалютнаяСуммаОборот) <> 0)
	OR (Sum(КоличествоОборот) <> 0)
) AS Основной

 



ИМХО, проблема с inner join в этой части кода
Код
Выбрать все
	FROM _1SENTRY AS _1SENTRY_vt (NOLOCK)
		INNER JOIN _1SACCS AS _1SACCS_dt_vt (NOLOCK) ON (_1SENTRY_vt.ACCDTID = _1SACCS_dt_vt.ID)
		INNER JOIN _1SACCS AS sq_dt_vt (NOLOCK) ON (_1SACCS_dt_vt.SCHKOD >= sq_dt_vt.SCHKOD) AND (Left(_1SACCS_dt_vt.SCHKOD, Len(sq_dt_vt.SCHKOD)) = sq_dt_vt.SCHKOD) AND (_1SACCS_dt_vt.PLANID = 2444) AND ((sq_dt_vt.ID in (select val from #СпСчетовДтО)))
 


получается что к каждому результату из _1SENTRY добавляют результаты из присоединяемых таблиц
и тогда вместо одной строки с результатом создаются несколько строк (по кол-ву inner join) с такими же результатами... и которые конечном итоге суммируются после группировки

любопытно что второй присоединяемый запрос считает правильно не смотря на 2 включенных отбора

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


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: Удваивание результатов (union all)
Ответ #6 - 18. Августа 2008 :: 09:06
Печать  
в общем разобрался
опишу вдруг кому пригодится
путем тестирования обнаружилось следующее
вот код для сбора списка счетов для отбора
Код
Выбрать все
 	СпСчетовДт=СоздатьОбъект("СписокЗначений");
	Если ПустоеЗначение(ВидБюджета.АнСчетаДт)=0 тогда
 		СпСчетовДт.FromSeparatedString(ВидБюджета.АнСчетаДт);
 		Для нн=1 по СпСчетовДт.РазмерСписка() цикл
 			Сч=СчетПоКоду(СпСчетовДт.GetValue(нн));
 			СпСчетовДт.SetValue(нн,Сч);
 		КонецЦикла;
 	КонецЕсли;
	  СпСчетовКт=СоздатьОбъект("СписокЗначений");
	Если ПустоеЗначение(ВидБюджета.АнСчетаКт)=0 тогда
 		СпСчетовКт.FromSeparatedString(ВидБюджета.АнСчетаКт);
		  Для нн=1 по СпСчетовКт.РазмерСписка() цикл
 			Сч=СчетПоКоду(СпСчетовКт.GetValue(нн));
 			СпСчетовКт.SetValue(нн,Сч);
 		КонецЦикла;
	КонецЕсли;
	SQL.УложитьСписокОбъектов(СпСчетовДт, "#СпСчетовДтО","Основной");
	SQL.УложитьСписокОбъектов(СпСчетовКт, "#СпСчетовКтО","Основной");
	SQL.УложитьСписокОбъектов(СпСчетовДт, "#СпСчетовДтБ","Бюджетный");
	SQL.УложитьСписокОбъектов(СпСчетовКт, "#СпСчетовКтБ","Бюджетный");
 


ВидБюджета.АнСчетаДт и ВидБюджета.АнСчетаКт выглядят в виде строк с разделителями ("60.1","60.2","60.3","62.1","62.2","62.3","63.1","63.2","79.1","79.2")

и для запроса в основной план счетов я добавлял условия (СчетДт in (select val from #СпСчетовДтО))
и (СчетКт in (select val from #СпСчетовКтО))

для запроса в бюджетный план счетов такие же условия но в таблицы #СпСчетовДтБ и  #СпСчетовКтБ

СчетПоКоду без указания плана, возвращает план счетов по умолчанию,

вот тут становится непонятно как работает УложитьСписокОбъектов для с счетами и планами счетов
если в него передать счета одного плана счетов и указать другой...
еще один любопытный момент, замена в бюджетном запросе временной таблички списка счетов бюджетного плана на такую же табличку основного и все стало работать как надо
я почему то думал что у разных планов счетов счета с одинаковым номером - разные элементы
почему это работает - непонятно

в общем добавил для бюджетного плана счетов отдельные списки
Код
Выбрать все
 	СпСчетовДтБ=СоздатьОбъект("СписокЗначений");
	Если ПустоеЗначение(ВидБюджета.АнСчетаДт)=0 тогда
 		СпСчетовДтБ.FromSeparatedString(ВидБюджета.АнСчетаДт);
 		Для нн=1 по СпСчетовДтБ.РазмерСписка() цикл
 			Сч=СчетПоКоду(СпСчетовДтБ.GetValue(нн),ПланыСчетов.Бюджетный);
 			СпСчетовДтБ.SetValue(нн,Сч);
 		КонецЦикла;
 	КонецЕсли;
	  СпСчетовКтБ=СоздатьОбъект("СписокЗначений");
	Если ПустоеЗначение(ВидБюджета.АнСчетаКт)=0 тогда
 		СпСчетовКтБ.FromSeparatedString(ВидБюджета.АнСчетаКт);
		  Для нн=1 по СпСчетовКтБ.РазмерСписка() цикл
 			Сч=СчетПоКоду(СпСчетовКтБ.GetValue(нн),ПланыСчетов.Бюджетный);
 			СпСчетовКтБ.SetValue(нн,Сч);
 		КонецЦикла;
	КонецЕсли;
 	СпСчетовДтО=СоздатьОбъект("СписокЗначений");
	Если ПустоеЗначение(ВидБюджета.АнСчетаДт)=0 тогда
 		СпСчетовДтО.FromSeparatedString(ВидБюджета.АнСчетаДт);
 		Для нн=1 по СпСчетовДтО.РазмерСписка() цикл
 			Сч=СчетПоКоду(СпСчетовДтО.GetValue(нн));
 			СпСчетовДтО.SetValue(нн,Сч);
 		КонецЦикла;
 	КонецЕсли;
	  СпСчетовКтО=СоздатьОбъект("СписокЗначений");
	Если ПустоеЗначение(ВидБюджета.АнСчетаКт)=0 тогда
 		СпСчетовКтО.FromSeparatedString(ВидБюджета.АнСчетаКт);
		  Для нн=1 по СпСчетовКтО.РазмерСписка() цикл
 			Сч=СчетПоКоду(СпСчетовКтО.GetValue(нн));
 			СпСчетовКтО.SetValue(нн,Сч);
 		КонецЦикла;
	КонецЕсли;

	SQL.УложитьСписокОбъектов(СпСчетовДтБ, "#СпСчетовДтБ","Бюджетный");
	SQL.УложитьСписокОбъектов(СпСчетовКтБ, "#СпСчетовКтБ","Бюджетный");
	SQL.УложитьСписокОбъектов(СпСчетовДтО, "#СпСчетовДтО","Основной");
	SQL.УложитьСписокОбъектов(СпСчетовКтО, "#СпСчетовКтО","Основной");

 


и все стало работать нормально...
п.с.
мда уж
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Удваивание результатов (union all)
Ответ #7 - 18. Августа 2008 :: 10:09
Печать  
Респект.  Улыбка Я бы по текстам запросов это не нашёл. И что-то мне подсказывает, что со справочниками УложитьСписокОбъектов работает так же.

А два джойна там потому, что при выключенном отборе по счетам вхождение счёта проводки в группу определяется, в том числе, и сравнением кода счёта с кодом группы.

UPD: Именно кода, а не идентификатора. Поэтому вот это: Цитата:
я почему то думал что у разных планов счетов счета с одинаковым номером - разные элементы  
почему это работает - непонятно
и работает.
« Последняя редакция: 18. Августа 2008 :: 11:27 - berezdetsky »  

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


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: Удваивание результатов (union all)
Ответ #8 - 18. Августа 2008 :: 12:22
Печать  
berezdetsky писал(а) 18. Августа 2008 :: 10:09:
Респект.  Улыбка Я бы по текстам запросов это не нашёл. И что-то мне подсказывает, что со справочниками УложитьСписокОбъектов работает так же.

решил добить вопрос
Код
Выбрать все
	// testing
// пробуем уложить список счетов основного плана счетов как бюджетный - результат в таблице 1 (слева)

 	СпСчетовДтО=СоздатьОбъект("СписокЗначений");
	Если ПустоеЗначение(ВидБюджета.АнСчетаДт)=0 тогда
 		СпСчетовДтО.FromSeparatedString(ВидБюджета.АнСчетаДт);
 		Для нн=1 по СпСчетовДтО.РазмерСписка() цикл
 			Сч=СчетПоКоду(СпСчетовДтО.GetValue(нн));
 			СпСчетовДтО.SetValue(нн,Сч);                              
 		КонецЦикла;
 	КонецЕсли;

	SQL.УложитьСписокОбъектов(СпСчетовДтО, "#СпСчетовДтБ","Бюджетный");
	ТекстЗапроса = "  
	|Select
	|  val
	|  ,val [Счет  $Счет.Основной]
	|  ,val [Счет  $Счет.Бюджетный]
	| from #СпСчетовДтБ
	|";  

	тз=SQL.ВыполнитьИнструкцию(ТекстЗапроса);  
	debug.ViewVT(тз);


// пробуем уложить список счетов Бюджетного плана счетов как бюджетный - результат в таблице 2 (справа)

	СпСчетовДтБ=СоздатьОбъект("СписокЗначений");
	Если ПустоеЗначение(ВидБюджета.АнСчетаДт)=0 тогда
 		СпСчетовДтБ.FromSeparatedString(ВидБюджета.АнСчетаДт);
 		Для нн=1 по СпСчетовДтБ.РазмерСписка() цикл
 			Сч=СчетПоКоду(СпСчетовДтБ.GetValue(нн),ПланыСчетов.Бюджетный);
 			СпСчетовДтБ.SetValue(нн,Сч);                              
 		КонецЦикла;
 	КонецЕсли;

	SQL.УложитьСписокОбъектов(СпСчетовДтБ, "#СпСчетовДтБ","Бюджетный");
	ТекстЗапроса = "  
	|Select
	|  val
	|  ,val [Счет  $Счет.Основной]
	|  ,val [Счет  $Счет.Бюджетный]
	| from #СпСчетовДтБ
	|";  
	тз=SQL.ВыполнитьИнструкцию(ТекстЗапроса);  
	debug.ViewVT(тз);
//////////////////////////
 



получается что УложитьСписокОбъектов при добавлении в него спика счетов одного плана счето и с указание другого плана счетов, дублирует список для обоих планов
и как следствие этого при включении отбора в моем запросе
каждый включенный отбор удваивал результат...
п.с.
баг это или нет решать не буду
п.п.сдумал кукушка улетит
  

1_004.JPG ( 55 KB | Загрузки )
1_004.JPG
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Удваивание результатов (union all)
Ответ #9 - 18. Августа 2008 :: 13:15
Печать  
По ходу там и с типизацией не всё в порядке..
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Удваивание результатов (union all)
Ответ #10 - 18. Августа 2008 :: 14:12
Печать  
Создавайте баг, будем думать.
И про типизацию подробнее, очень желателен простой и повторяемый тест/тестовая конфа Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
g00d
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: Удваивание результатов (union all)
Ответ #11 - 18. Августа 2008 :: 16:38
Печать  
artbear писал(а) 18. Августа 2008 :: 14:12:
Создавайте баг, будем думать.
И про типизацию подробнее, очень желателен простой и повторяемый тест/тестовая конфа Улыбка

завтра сделаю тестовую конфу
  
Наверх
 
IP записан
 
g00d
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 68
Зарегистрирован: 13. Ноября 2006
Re: Удваивание результатов (union all)
Ответ #12 - 19. Августа 2008 :: 11:58
Печать  
g00d писал(а) 18. Августа 2008 :: 16:38:
artbear писал(а) 18. Августа 2008 :: 14:12:
Создавайте баг, будем думать.
И про типизацию подробнее, очень желателен простой и повторяемый тест/тестовая конфа Улыбка

завтра сделаю тестовую конфу


а вот собствено и тестовая конфа  (у себя тестировал на sql2000)
библиотеку 1cpp.dll должна лежать в папке базы
архив 20кб
  

1Cv7_009.rar ( 18 KB | Загрузки )
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать