Упражнение 60

Посчитать остаток денежных средств на начало дня 15.04.2001 на каждом пункте приема для базы данных с отчетностью не чаще одного раза в день. Вывод: пункт, остаток.

Задача 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;
mssql
🚫
[[ error ]]
[[ column ]]
[[ value ]]

Эта задача во многом аналогична предыдущей задаче №59. По сути, здесь дополнительно используется лишь отбор по дате. В связи с этим мы хотим обратить внимание на ее представление в запросе. Дело в том, что в предикате сравнивается строка с полем типа datetime. В SQL Server имеется функция CONVERT, которая позволяет преобразовать строковое представление даты/времени к этому типу, используя различные форматы представления даты. Однако строковое представление в виде “год месяц день”, которое используется в рассматриваемом решении, всегда будет правильно преобразовываться неявно к типу datetime вне зависимости от настроек сервера [5].

Кто разобрался с ошибкой в предыдущей задаче, наверняка, увидел здесь попытку ее исправить. К сожалению, попытку неудачную, что, с другой стороны, дает вам возможность еще раз проверить себя.

ПиР

Решить упражнение на SQL-EX.RU