а этот с включенным отбором только по счетуДт
удваивает результаты
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 включенных отбора
попробовал поменять их местами ничего не изменилось...