Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL 2000, Как в подзапросе посчитать сумму с UNION?  [new]
Pvase
Member

Откуда:
Сообщений: 982
Надо выполнить запрос:
SELECT
	TPL.IDDOC AS [ПутевойЛист],
	TZak.IDDOC AS [Заказ],
	SUM(TZak.СуммаГРН) AS СуммаЗаказа,
	(SELECT 
			SUM(TPKO.СуммаСНДС)+SUM(TБВ.Приход)
		FROM 
			Документ_ПриходныйКассовый AS TPKO (NOLOCK)
		WHERE 
			(TZak.IDDOC = TPKO.Заказ) 
			AND (TPKO.Проведен = 1)
	UNION ALL
	SELECT 
			SUM(TБВ.Приход)
		FROM 
			ДокументСтроки_ДвиженияДенежныхСредств AS TБВ (NOLOCK) 
			INNER JOIN	Документ_ДвиженияДенежныхСредств AS TБВ1 (NOLOCK) ON (TБВ1.IDDOC = TБВ.IDDOC)
		WHERE 
			(TZak.IDDOC = TБВ.Заказ) 
			AND (TБВ1.Проведен = 1)
				) AS СуммаПКО
	
FROM Документ_ПутевойЛист AS TPL (NOLOCK)
	LEFT OUTER JOIN Документ_Заказ AS TZak (NOLOCK) ON (TPLS.Заказ = TZak.IDDOC)

GROUP BY
	TPL.IDDOC,
	TPL.Водитель,
	TZak.IDDOC,

Как видно подсчет суммы в подзапросе может вернуть 2 строки, как сделать чтобы возвращалось одно значение (точнее сумма двух подзапросов)?
20 июл 09, 14:46    [7436141]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2000, Как в подзапросе посчитать сумму с UNION?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Pvase,

select sum(a) from
(   select SUM(TPKO.СуммаСНДС)+SUM(TБВ.Приход) as a  ...
      union all
    select ...
)
20 июл 09, 14:48    [7436152]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2000, Как в подзапросе посчитать сумму с UNION?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36805
SELECT
	TPL.IDDOC AS [ПутевойЛист],
	TZak.IDDOC AS [Заказ],
	SUM(TZak.СуммаГРН) AS СуммаЗаказа,
        ( select sum(a) from 
	(SELECT 
			SUM(TPKO.СуммаСНДС)+SUM(TБВ.Приход) as a
		FROM 
			Документ_ПриходныйКассовый AS TPKO (NOLOCK)
		WHERE 
			(TZak.IDDOC = TPKO.Заказ) 
			AND (TPKO.Проведен = 1)
	UNION ALL
	SELECT 
			SUM(TБВ.Приход)
		FROM 
			ДокументСтроки_ДвиженияДенежныхСредств AS TБВ (NOLOCK) 
			INNER JOIN	Документ_ДвиженияДенежныхСредств AS TБВ1 (NOLOCK) ON (TБВ1.IDDOC = TБВ.IDDOC)
		WHERE 
			(TZak.IDDOC = TБВ.Заказ) 
			AND (TБВ1.Проведен = 1)
                  ) a  ) AS СуммаПКО
	
FROM Документ_ПутевойЛист AS TPL (NOLOCK)
	LEFT OUTER JOIN Документ_Заказ AS TZak (NOLOCK) ON (TPLS.Заказ = TZak.IDDOC)

GROUP BY
	TPL.IDDOC,
	TPL.Водитель,
	TZak.IDDOC,
20 июл 09, 14:48    [7436153]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2000, Как в подзапросе посчитать сумму с UNION?  [new]
Pvase
Member

Откуда:
Сообщений: 982
Сделал так:
SELECT
	TPL.IDDOC AS [ПутевойЛист],
	TZak.IDDOC AS [Заказ],
	SUM(TZak.СуммаГРН) AS СуммаЗаказа,
	(SELECT 
			SUM(TPKO.СуммаСНДС)+SUM(TБВ.Приход)
		FROM 
			Документ_ПриходныйКассовый AS TPKO (NOLOCK)
		WHERE 
			(TZak.IDDOC = TPKO.Заказ) 
			AND (TPKO.Проведен = 1)
	) + (
	SELECT 
			SUM(TБВ.Приход)
		FROM 
			ДокументСтроки_ДвиженияДенежныхСредств AS TБВ (NOLOCK) 
			INNER JOIN	Документ_ДвиженияДенежныхСредств AS TБВ1 (NOLOCK) ON (TБВ1.IDDOC = TБВ.IDDOC)
		WHERE 
			(TZak.IDDOC = TБВ.Заказ) 
			AND (TБВ1.Проведен = 1)
				) AS СуммаПКО
	
FROM Документ_ПутевойЛист AS TPL (NOLOCK)
	LEFT OUTER JOIN Документ_Заказ AS TZak (NOLOCK) ON (TPLS.Заказ = TZak.IDDOC)

GROUP BY
	TPL.IDDOC,
	TPL.Водитель,
	TZak.IDDOC
Правильно ли?
20 июл 09, 14:49    [7436159]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2000, Как в подзапросе посчитать сумму с UNION?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36805
Pvase
Правильно ли?
Запустите и посмотрите, правильно ли.
20 июл 09, 14:51    [7436173]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2000, Как в подзапросе посчитать сумму с UNION?  [new]
Pvase
Member

Откуда:
Сообщений: 982
Все таки правильно через подзапрос, иначе в случае если в первом подзапросе будет NULL то при установках по умолчанию NULL + Число будет NULL. А в случае с подзапросом - все хорошо работает. Всем спасибо.
20 июл 09, 15:02    [7436225]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2000, Как в подзапросе посчитать сумму с UNION?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2Pvase
есть функция для подобных случаев
isnull
называется.

для спящего время бодрствования равносильно сну
20 июл 09, 15:05    [7436242]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2000, Как в подзапросе посчитать сумму с UNION?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Pvase
при установках по умолчанию NULL + Число будет NULL.
В данном случае (для int) NULL будет всегда, независимо ни от каких настроек!
20 июл 09, 15:22    [7436312]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2000, Как в подзапросе посчитать сумму с UNION?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
Pvase
при установках по умолчанию NULL + Число будет NULL.
В данном случае (для int) NULL будет всегда, независимо ни от каких настроек!
Точнее, для нестрокового типа.
Для строкового всё ещё есть SET CONCAT_NULL_YIELDS_NULL
20 июл 09, 15:25    [7436325]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить