Ответ 1
В SQL 2005/2008:
SELECT ISNULL(MAX(X), 0) AS MaxX
FROM tbl WHERE XID = 1
Как вы возвращаете 0 вместо null при запуске следующей команды:
SELECT MAX(X) AS MaxX
FROM tbl
WHERE XID = 1
(Предполагая, что нет строки, где XID = 1)
В SQL 2005/2008:
SELECT ISNULL(MAX(X), 0) AS MaxX
FROM tbl WHERE XID = 1
или
SELECT coalesce(MAX(X), 0) AS MaxX
FROM tbl
WHERE XID = 1
Подобно этому (для MySQL):
SELECT IFNULL(MAX(X), 0) AS MaxX
FROM tbl
WHERE XID = 1
Для MSSQL замените IFNULL
на ISNULL
или для Oracle используйте NVL
Вы также можете использовать COALESCE (выражение [,... n]) - возвращает сначала не null, как:
SELECT COALESCE(MAX(X),0) AS MaxX
FROM tbl
WHERE XID = 1
Oracle будет
SELECT NVL(MAX(X), 0) AS MaxX
FROM tbl
WHERE XID = 1;
Для OLEDB вы можете использовать этот запрос:
select IIF(MAX(faculty_id) IS NULL,0,MAX(faculty_id)) AS max_faculty_id from faculties;
Поскольку IFNULL не работает там
В зависимости от того, какой продукт вы используете, но большинство поддерживают что-то вроде
SELECT IFNULL(MAX(X), 0, MAX(X)) AS MaxX FROM tbl WHERE XID = 1
или
SELECT CASE MAX(X) WHEN NULL THEN 0 ELSE MAX(X) FROM tbl WHERE XID = 1