TablePlus
When selecting data from a table, there might be some NULL values that you don’t want to show, or you want to replace it with 0 for the aggregate functions. Then you can use COALESCE to replace the NULL with 0.
For example, we have the table salaries with 5 columns: emp_no , from_date , to_date , salary , bonus . But the bonus column is optional and may contain NULL values.
| emp_no | salary | from_date | to_date | bonus |
|---|---|---|---|---|
| 10001 | 60117 | 1986-06-26 | 1987-06-26 | 2000 |
| 10001 | 62102 | 1987-06-26 | 1988-06-25 | NULL |
| 10001 | 66074 | 1988-06-25 | 1989-06-25 | NULL |
| 10001 | 66596 | 1989-06-25 | 1990-06-25 | 3000 |
| 10001 | 66961 | 1990-06-25 | 1991-06-25 | 1500 |
| 10001 | 71046 | 1991-06-25 | 1992-06-24 | NULL |
| 10001 | 74333 | 1992-06-24 | 1993-06-24 | NULL |
| 10001 | 75286 | 1993-06-24 | 1994-06-24 | 2000 |
Run this SELECT … COALESCE … statement to return 0 as the alternative value when bonus value is NULL:
In MySQL you can also use IFNULL function to return 0 as the alternative for the NULL values:
In MS SQL Server, the equivalent is ISNULL function:
In Oracle, you can use NVL function:
| emp_no | salary | from_date | to_date | bonus |
|---|---|---|---|---|
| 10001 | 60117 | 1986-06-26 | 1987-06-26 | 2000 |
| 10001 | 62102 | 1987-06-26 | 1988-06-25 | 0 |
| 10001 | 66074 | 1988-06-25 | 1989-06-25 | 0 |
| 10001 | 66596 | 1989-06-25 | 1990-06-25 | 3000 |
| 10001 | 66961 | 1990-06-25 | 1991-06-25 | 1500 |
| 10001 | 71046 | 1991-06-25 | 1992-06-24 | 0 |
| 10001 | 74333 | 1992-06-24 | 1993-06-24 | 0 |
| 10001 | 75286 | 1993-06-24 | 1994-06-24 | 2000 |
Need a good GUI tool for databases? TablePlus provides a native client that allows you to access and manage Oracle, MySQL, SQL Server, PostgreSQL and many other databases simultaneously using an intuitive and powerful graphical interface.
Need a quick edit on the go? Download for iOS
Функция ISNULL (Transact-SQL)
Заменяет значение NULL указанным замещающим значением.
Синтаксис
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
check_expression
Выражение, которое необходимо проверить на равенство значению NULL. Аргумент check_expression может быть любого типа.
replacement_value
Выражение, возвращаемое, если check_expression имеет значение NULL. Аргумент replacement_value должен иметь тип, который может быть неявно преобразован в тип check_expression.
Типы возвращаемых данных
Возвращает тип, совпадающий с типом выражения check_expression. Если в аргументе check_expression предоставлено литеральное значение NULL, возвращает тип данных replacement_value. Если в аргументе check_expression предоставлено литеральное значение NULL, а аргумент replacement_value не задан, возвращает int.
Remarks
Возвращается значение check_expression, если это выражение не равно NULL. В противном случае возвращается значение replacement_value. Если типы являются разными, то тип replacement_value неявно преобразуется в тип check_expression. Значение replacement_value может усекаться, если значение replacement_value длиннее, чем check_expression.
Для возврата первого значения, отличного от NULL, используйте функцию COALESCE (Transact-SQL).
Примеры
A. Использование функции ISNULL с функцией AVG
Следующий пример демонстрирует расчет среднего значения веса всех продуктов. Все записи со значением NULL в столбце 50 таблицы Weight заменяются значением Product .
Б. Использование функции ISNULL
Следующий пример производит выборку описания, процента скидки, минимального и максимального количества для всех специальных предложений из базы AdventureWorks2012 . Если максимальное количество для отдельного специального предложения равно NULL, отображаемое значение MaxQty в результирующем наборе заменяется на 0.00 .
| Description | DiscountPct | MinQty | Максимальное количество |
|---|---|---|---|
| Без скидки | 0,00 | 0 | 0 |
| Оптовая скидка | 0,02 | 11 | 14 |
| Оптовая скидка | 0,05 | 15 | 4 |
| Оптовая скидка | 0,10 | 25 | 0 |
| Оптовая скидка | 0,15 | 41 | 0 |
| Оптовая скидка | 0,20 | 61 | 0 |
| Mountain-100 Cl | 0,35 | 0 | 0 |
| Sport Helmet Di | 0,10 | 0 | 0 |
| Road-650 Overst | 0,30 | 0 | 0 |
| Mountain Tire S | 0,50 | 0 | 0 |
| Sport Helmet Di | 0,15 | 0 | 0 |
| LL Road Frame S | 0,35 | 0 | 0 |
| Touring-3000 Pr | 0,15 | 0 | 0 |
| Touring-1000 Pr | 0,20 | 0 | 0 |
| Half-Price Peda | 0,50 | 0 | 0 |
| Mountain-500 Si | 0,40 | 0 | 0 |
(16 row(s) affected)
В. Проверка значений NULL в предложении WHERE
Не используйте для поиска значений NULL выражение ISNULL, вместо него следует использовать выражение IS NULL. В следующем примере выполняется поиск всех продуктов, имеющих значение NULL в столбце веса. Заметьте, что между словами IS и NULL стоит пробел.
Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)
Г. Использование функции ISNULL с функцией AVG
В приведенном ниже примере рассчитывается среднее значение веса всех продуктов в образце таблицы. Все записи со значением NULL в столбце 50 таблицы Weight заменяются значением Product .
Д. Использование функции ISNULL
В приведенном ниже примере функция ISNULL используется для поиска значений NULL в столбце MinPaymentAmount и отображения значения 0.00 для соответствующих строк.
Здесь приводится частичный результирующий набор.
| ResellerName | MinimumPayment |
|---|---|
| A Bicycle Association | 0,0000 |
| A Bike Store | 0,0000 |
| A Cycle Shop | 0,0000 |
| A Great Bicycle Company | 0,0000 |
| A Typical Bike Shop | 200,0000 |
| Acceptable Sales & Service | 0,0000 |
Е. Использование функции IS NULL для проверки на значение NULL в предложении WHERE
В приведенном ниже примере выполняется поиск всех продуктов, имеющих значение NULL в столбце Weight . Заметьте, что между словами IS и NULL стоит пробел.
Как составить sql запрос на замену null на 0?
Нужен запрос который будет преобразовывать значение столбца в 0 если оно null, но если нет, то должно возвращаться значение столбца.
Просто если в каком-то из столбцов стоит значение null, то в suma тоже получается null. Помогите решить проблему.
- Вопрос задан более двух лет назад
- 2154 просмотра
- Вконтакте
- Вконтакте
DERBIAGLOBALISTO, если вот эти подзапросы:
всегда возвращают не более одной записи, можно попробовать переписать запрос так:
Если не поможет — надо уже предметно разбираться, смотреть какие у вас таблицы, связи, данные, индексы, каким получается план выполнения.