Упражнение 60
Задача 2.3.1
SELECT i.point,
CASE inc
WHEN NULL THEN 0
ELSE inc
END -
CASE out
WHEN NULL
THEN 0
ELSE out
END
FROM (SELECT point, SUM(inc) inc
FROM Income_o
WHERE '20010415' > date
GROUP BY point
) AS I
FULL JOIN
(SELECT point, SUM(out) out
FROM Outcome_o
WHERE '20010415' > date
GROUP BY point
) AS III ON III.point = I.point;
[[ column ]] |
---|
[[ value ]] |
Эта задача во многом аналогична предыдущей задаче №59. По сути, здесь дополнительно используется лишь отбор по дате. В связи с этим мы хотим обратить внимание на ее представление в запросе. Дело в том, что в предикате сравнивается строка с полем типа datetime. В SQL Server имеется функция CONVERT, которая позволяет преобразовать строковое представление даты/времени к этому типу, используя различные форматы представления даты. Однако строковое представление в виде “год месяц день”, которое используется в рассматриваемом решении, всегда будет правильно преобразовываться неявно к типу datetime вне зависимости от настроек сервера [5].
Кто разобрался с ошибкой в предыдущей задаче, наверняка, увидел здесь попытку ее исправить. К сожалению, попытку неудачную, что, с другой стороны, дает вам возможность еще раз проверить себя.