Упражнение 59 (подсказки и решения)

В решении 2.2.1 не учитывается тот факт, что возможна ситуация, когда на некотором пункте приема может быть только приход, но не быть расхода, то есть в таблице Outcome_o может не быть ни одной строки, относящейся к данному пункту приема. С точки зрения предметной области эта ситуация возможна для вновь открытого пункта приема, когда факт приема денежных средств уже зафиксирован, а факт расхода — еще нет. Тогда выражение в предложении SELECT

ss.inc - dd.out

для такой точки приема станет эквивалентно выражению

ss.inc - NULL

что даст в результате NULL, а не ss.inc, как это должно быть по условиям задачи.

Исправить решение очень легко, переписав ошибочное выражение в виде

(COALESCE (ss.inc, 0) - COALESCE (dd.out, 0) )

что соответствует стандарту, или с помощью функции SQL Server ISNULL:

(ISNULL(ss.inc, 0) - ISNULL(dd.out, 0) )

Перейти к обсуждению задачи 59

Решить задачу на SQL-EX.RU