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

Откуда: Tbilisi
Сообщений: 2867
В последней части запроса выводит Null (отмечено красным), если какое-нибудь поле не имеет значение, допустим
gadaricxvebi_sum, а остальные имеют значение, а мне нужно, чтобы Null засчитал как 0, а остальные значения сложил бы и вывел бы общее значение.

salaro_barati,
CASE WHEN gadaricxvebi_sum is Null THEN 0 ELSE gadaricxvebi_sum END gadaricxvistanxa,
CASE WHEN xelsh_sum is Null THEN 0 ELSE xelsh_sum END xelsh_fasi,
jandacvameria,
gadaricxvebi_sum+xelsh_sum+jandacvameria sumgadaricxva,
salaro_barati+gadaricxvebi_sum+xelsh_sum+jandacvameria summa


Наверное надо как-то использовать CASE WHEN THEN 0 ELSE END, только я не поняла как именно.

Ниже приводится полная версия запроса.

+
ALTER PROCEDURE [dbo].[proc_stat]
	@tve int,
	@teli int
AS
;
WITH
 	dgeebi_q AS
 	(
	SELECT		tve, 
				days,
				CONVERT(smalldatetime, CAST(days AS varchar) + '.' 
                    + CAST(@tve AS varchar) 
                     + '.' + CAST(@teli AS varchar), 104) Tarigi, 
		
				DATEPART(dw, (CONVERT(smalldatetime, CAST(days AS varchar) + '.' 
                    + CAST(@tve AS varchar) 
                     + '.' + CAST(@teli AS varchar), 104))) kvira
	FROM		days
	WHERE		tve=@tve 
 	),

	patients_gamokvlevebis_fasebi AS
	(
	SELECT		id_patient_history, 
				Sum(fasi) AS SumOffasi
	FROM		baza  
	GROUP BY 	id_patient_history
	),

	statistika_money_hepa_1_1_q AS
	(
	SELECT		momartvis_tarigi,
				Year(momartvis_tarigi) YY,
				Sum(salaros_tanxa) sumsalaro,
				Sum(baratis_tanxa) sumbarati,
				Sum(salaros_tanxa+baratis_tanxa) salaro_barati,
				Sum(CASE WHEN id_organization is not Null THEN 0 ELSE gadaricxvis_tanxa_2 END) gadaricxvebi_sum,
				Sum(CASE WHEN id_organization is Null THEN 0 ELSE SumOffasi END) xelsh_sum				
	FROM		patients_history PH
				LEFT JOIN patients_gamokvlevebis_fasebi PGF
				ON PH.id_patient_history = PGF.id_patient_history
	GROUP BY	momartvis_tarigi,
				Year(momartvis_tarigi)
	),

	ELIM_1 AS
	(
	SELECT		PH.id_patient_history,
				PH.id_patient,
				momartvis_tarigi,
				PH.procent,
				CASE
					WHEN PH.procent=30 Or PH.procent=90 THEN SumOffasi*30/100
					WHEN PH.procent=70 Or PH.procent=100 THEN SumOffasi*70/100 
				END Jandacva,
				CASE
					WHEN PH.procent=90 THEN SumOffasi*60/100
					WHEN PH.procent=100 THEN SumOffasi*30/100 
				END Meria
	FROM		patients_history PH
				LEFT JOIN Patients_gamokvlevebis_fasebi 
					ON PH.id_patient_history = Patients_gamokvlevebis_fasebi.id_patient_history 
				LEFT JOIN baza B
					ON PH.id_patient_history = B.id_patient_history 
				LEFT JOIN registration_test R
					ON B.id_registration_test = R.id_registration_test
	GROUP BY	PH.id_patient_history,
				PH.id_patient,
				momartvis_tarigi,
				PH.procent,
				CASE
					WHEN PH.procent=30 Or PH.procent=90 THEN SumOffasi*30/100
					WHEN PH.procent=70 Or PH.procent=100 THEN SumOffasi*70/100 
				END,
				CASE
					WHEN PH.procent=90 THEN SumOffasi*60/100
					WHEN PH.procent=100 THEN SumOffasi*30/100 
				END
	),

	ELIM_2  AS
	(
	SELECT 		Year(momartvis_tarigi) YY,
				Month(momartvis_tarigi) MM,
				momartvis_tarigi,
				Sum(Jandacva) SumOfEJandacva,
				Sum(Meria) SumOfEMeria,
				Sum(Jandacva+Meria) AS jandacvameria
	FROM		ELIM_1
	GROUP BY	Year(momartvis_tarigi),
				Month(momartvis_tarigi),
				momartvis_tarigi
	)	

SELECT		Tarigi,
			CASE 
				WHEN kvira=2 THEN 'Понедельник'
				WHEN kvira=3 THEN 'Вторник'
				WHEN kvira=4 THEN 'Среда'
				WHEN kvira=5 THEN 'Четверг'
				WHEN kvira=6 THEN 'Пятница'
				WHEN kvira=7 THEN 'Суббота'
			END kviradge,
			kvira,
			sumsalaro,
			sumbarati,
			salaro_barati,
			CASE WHEN gadaricxvebi_sum is Null THEN 0 ELSE gadaricxvebi_sum END gadaricxvistanxa,
			CASE WHEN xelsh_sum is Null THEN 0 ELSE xelsh_sum END xelsh_fasi,
			jandacvameria,
			gadaricxvebi_sum+xelsh_sum+jandacvameria sumgadaricxva,
			salaro_barati+gadaricxvebi_sum+xelsh_sum+jandacvameria summa 
FROM		(dgeebi_q 
			LEFT JOIN statistika_money_hepa_1_1_q 
				ON dgeebi_q.Tarigi = statistika_money_hepa_1_1_q.momartvis_tarigi) 
			INNER JOIN ELIM_2 
				ON dgeebi_q.Tarigi = ELIM_2.momartvis_tarigi
GROUP BY	Tarigi,
			CASE 
				WHEN kvira=2 THEN 'Понедельник'
				WHEN kvira=3 THEN 'Вторник'
				WHEN kvira=4 THEN 'Среда'
				WHEN kvira=5 THEN 'Четверг'
				WHEN kvira=6 THEN 'Пятница'
				WHEN kvira=7 THEN 'Суббота'
			END,
			kvira,
			sumsalaro,
			sumbarati,
			salaro_barati,
			CASE WHEN gadaricxvebi_sum is Null THEN 0 ELSE gadaricxvebi_sum END,
			CASE WHEN xelsh_sum is Null THEN 0 ELSE xelsh_sum END,
			jandacvameria,
			gadaricxvebi_sum+xelsh_sum+jandacvameria,
			salaro_barati+gadaricxvebi_sum+xelsh_sum+jandacvameria 
ORDER BY	Tarigi
23 апр 17, 11:18    [20426182]     Ответить | Цитировать Сообщить модератору
 Re: Замена Null на 0 для подсчета суммы  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 27681
NickBell, воспользуйтесь функцией ISNULL:
https://msdn.microsoft.com/ru-ru/library/ms184325.aspx
23 апр 17, 11:22    [20426185]     Ответить | Цитировать Сообщить модератору
 Re: Замена Null на 0 для подсчета суммы  [new]
NickBell
Member

Откуда: Tbilisi
Сообщений: 2867
skyANA,

Получилось, огромное спасибо за помощь
23 апр 17, 11:35    [20426218]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить