Заменить null на 0 sql: Как заменить null на 0 в sql
Содержание
mysql — Как заменить значения NULL с одной таблицы на значения с другой таблицы при FULL OUTHER JOIN?
Вопрос задан
Изменён
3 года 2 месяца назад
Просмотрен
368 раз
Проверьте пжл правильность запроса SQL.
У меня есть таблица (Table_1
). Вот пример данных:
Id Value Info 1 NULL Test_1 2 12 Test_2 3 21 NULL 4 NULL Test_4 5 12 Test_5 6 7 Test_6 7 21 Test_7
И есть 2-я таблица (Table_2
).
Вот такая:
Id Value 1 32 12 NULL 4 NULL 12 31
Я хочу сделать следующий SELECT
:
Если
Id
в таблице 1 совпадает сId
в таблице 2, и значение поляValue
в таблице 1NULL
, то я его заменяю на значениеValue
с таблицы 2.Если какое-то
Id
из таблицы 2, не встречается в таблице 1, то я добавляю это значение в SELECT. Если какого-то поля не существует, то я его заменяю на NULL.Если какое-то
Id
из таблицы 1 не встречается в таблице 2, я оставляю запись так, как есть.
Вот мой код:
SELECT Table_1.Id, Table_1.Value, Table_1.Info CASE WHEN Table_1.Value IS NULL THEN Table_2.Value ELSE Table_1.Value END AS Value, FROM Table_1 FULL OUTER JOIN Table_2 ON Table_1.Id = Table_2.Id
Правильно ли я решил задачу?
Спасибо)
- mysql
- sql
- postgresql
- bigquery
2
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
Как в sql запросе вместо null поставить 0
← →
Alexander Vasjuk ( 2002-04-15 12:10 ) [0]
Насчет хранимых процедур все понятно (if (x IS NULL) then x = 0)
А вот в рамках одного запроса!
Вот конкретная проблема
select
Name,
(select sum(Price * Kol) from Prihod where Tovar = Tovar.ID) —
(select sum(Price * Kol) from Rashod where Tovar = Tovar.ID) Ostatok
from Tovar
order by Name
В примере при отсуствии записей в таблице Rashod c полем Tovar, равным полю ID таблицы Tovar, разница сумм будет NULL, как и вычитаемая сумма.
Как бы в рамках одного запроса заставить SUM выдавать 0 вместо NULL для случая, когда суммировать нечего?
← →
Val ( 2002-04-15 12:14 ) [1]
функция NVL
← →
Alexandr ( 2002-04-15 12:14 ) [2]
ага.
Юзай UDF
в Rfunc есть функция Z. Делает как раз то, что тебе надо.
← →
Val ( 2002-04-15 12:18 ) [3]
сорри, не обратил внимания на БД :((
← →
VAleksey ( 2002-04-15 12:21 ) [4]
CAST
← →
Johnmen ( 2002-04-15 12:24 ) [5]
>VAleksey © : Не поможет !
← →
SB.John ( 2002-04-15 12:30 ) [6]
функция nvl если она есть в InterBase (наверняка какой-то аналог должен быть) ну иди на худой конец decode
← →
Denbear ( 2002-04-15 13:25 ) [7]
В MSSQL есть такая функция.
ISNULL() — это системная функция, которая возвращает строку символов или числа вместо (NULL), когда это значение встречается в сохраняемой структуре данных, такой как столбец таблицы. Синтаксис функции ISNULL(): ISNULL(выражение, значение)
← →
Val ( 2002-04-15 13:27 ) [8]
никто на тип бд не смотрит 😉
← →
Alexandr ( 2002-04-15 13:31 ) [9]
2Val:
Как это никто? Я смотрел. И дал ему правильный совет. Я сам так работаю.
Его запрос преобразится в вид
select
Name,
z(select sum(Price * Kol) from Prihod where Tovar = Tovar.ID) —
z(select sum(Price * Kol) from Rashod where Tovar = Tovar.ID) Ostatok
from Tovar
order by Name
← →
Alexander Vasjuk ( 2002-04-15 13:41 ) [10]
Спасибо всем.
Да, похоже без UDF никак.
Пожалуй я все-таки через процедуру сделаю, чтоб потом у клиентом автоматом сработало, чтоб не лезть у них в сервер.
Да и против UDF у меня предубеждение. Не знаю, может эти глюки уже исправились, но раньше, к примеру, строковые функции глюкали на максимальной длине.
← →
Val ( 2002-04-15 13:41 ) [11]
>Alexandr © (15.04.02 13:31)
не относится это к вам совершенно 🙂
Ваш ответ и был-то единственным полезным
Z_Сергей
Select CH.fio as ‘ФИО’, CH.adres as ‘АДРЕС’, CH. telefon as ‘ТЕЛЕФОН’,
KN.nazvanie as ‘наз. Книги’, KN.avtor as ‘Автор’,
KN.zalog_stoim as ‘залоговая’, KN.stoim_prok as ‘прокат’, KN.zhanr as ‘жанр’,
TAS.cena_shtrafa as ‘сумма штрафа’, (KN.zalog_stoim-KN.stoim_prok)+TAS.cena_shtrafa as ‘сумма’
from vidanie_knigi as VI
INNER JOIN chitateli as CH ON VI.id_chitatel=CH.id_chitatel
INNER JOIN Knigi as KN ON VI.id_kniga=KN.id_kniga
LEFT JOIN shtrafi as SH ON VI.id_vid_knig=SH.id_vid_knig
Left JOIN tarifi_na_shtrafi as TAS ON SH.id_shtraf = TAS.id_shtraf
мне надо что б в поле сумма заполнена
Дополнено (1). Ох извините за картинку
Дополнено (2). запрос в MS SQL
Mihay
лучший ответ За скриншот пять с плюсом!
по теме — ISNULL вам в помощь (это же MS SQL правда?)
Дополнение #1
(KN.zalog_stoim-KN.stoim_prok)+TAS.cena_shtrafa as ‘сумма’ заменить на
(KN.zalog_stoim-KN.stoim_prok)+ISNULL(TAS.cena_shtrafa, 0) as ‘сумма’
ise-dvp
Картинка, конечно, увлекательная.
ise-dvp
У MySQL, если что, есть похожий оператор IFNULL (EXP1, EXP2)
Я разработал запрос, и в результатах для первых трех столбцов я получаю NULL . Как я могу заменить его на 0 ?
11 ответов
Я хочу знать, что или означают в приведенном ниже запросе public static int EnsureObjectHasAliases(string type, int id, int programId, string[] aliasList)
Я хочу получить 0 вместо null в моем запросе select. Я имею в виду, что в настоящее время мой запрос показывает NULL для столбца суммы, если в таблице нет записей. Могу ли я получить 0 для столбца amount в запросе select, если он имеет NULL?
Если вы хотите заменить столбец null чем-то другим, используйте IsNull .
Это поставит 0 в myColumn, если это null в первую очередь.
Вы можете использовать оба этих метода, но есть различия:
Сравнение COALESCE() и ISNULL():
Функция ISNULL и выражение COALESCE имеют схожую цель, но могут вести себя по-разному.
Поскольку ISNULL-это функция, она вычисляется только один раз. Как описано выше, входные значения для выражения COALESCE могут быть вычислены несколько раз.
Определение типа данных результирующего выражения отличается. ISNULL использует тип данных первого параметра, COALESCE следует выражение CASE управляет и возвращает тип данных значения с наивысшим приоритетом.
NULLability выражения результата отличается для ISNULL и COALESCE. Возвращаемое значение ISNULL всегда считается НЕ NULLable (при условии, что возвращаемое значение не является нулевым), тогда как COALESCE с параметрами, отличными от null, считается NULL. Таким образом, выражения ISNULL(NULL, 1) и COALESCE(NULL, 1), хотя эквивалентны, имеют разные значения обнуления. Это делает разница, если вы используете эти выражения в вычисляемых столбцах, создаете ключевые ограничения или делаете возвращаемое значение scalar UDF детерминированным, чтобы его можно было проиндексировать, как показано в следующем примере.
— Это утверждение не выполняется, поскольку ПЕРВИЧНЫЙ КЛЮЧ не может принимать значения NULL — и обнуляемость выражения COALESCE для col2 — оценивается в NULL.
— Это утверждение успешно, потому что недействительность — функция ISNULL вычисляется КАК НЕ NULL.
Проверки для ISNULL и COALESCE также различны. Например, значение NULL для ISNULL преобразуется в int, тогда как для COALESCE необходимо указать тип данных.
ISNULL принимает только 2 параметра, в то время как COALESCE принимает переменное количество параметров.
если вам нужно узнать больше, вот полный документ от msdn.
Хотя, если суммировать when condition then 1 , вы можете так же легко изменить sum на count — например:
( Count(null) возвращает 0, в то время как sum(null) возвращает null.)
У меня есть длинный запрос SQL, и мне нужно изменить его, выполнив поиск и замену для найденных ниже строк. Не могли бы вы сообщить мне, пожалуйста, самый простой способ достичь этого? 1) Поиск и замена input string — ch.[No_] AS [Contract No.] как output string — ch.[No] AS [ContractNo.] 2) input.
Я хочу заменить значение null в вычисляемом столбце на 0 в запросе SQL Server. Это мой вопрос. SELECT Scenario, sum_amount + sum_cash + sum_tips AS total_earned FROM Cash_Scenario WHERE scenario_Id = 5 Я пытался SELECT Scenario, sum_amount + sum_cash + sum_tips AS total_earned.
Когда вы говорите первые три столбца, вы имеете в виду ваши SUM столбцов? Если это так, добавьте ELSE 0 к вашим CASE утверждениям. SUM значения NULL равно NULL .
Простой способ-это
Оберните свой столбец в этот код.
Может быть, проверьте, почему вы получаете нули
Используйте COALESCE , который возвращает первое значение не-null, например
Будет установлено значение 0, если оно будет возвращено как NULL .
Если вы используете Presto, AWS Athena и т. д., то функции ISNULL() нет. Вместо этого используйте:
Добавьте else к вашим операторам case, чтобы они по умолчанию равнялись нулю, если условие теста не найдено. В данный момент, если тестовое условие не найдено, NULL передается функции SUM().
проблема здесь заключается в том, что без оператора else вы обязательно получите Null, если состояние выполнения не соответствует статусу, указанному в описании столбца. Добавление чего-либо в Null приведет к Null, и это проблема с этим запросом.
следуя предыдущим ответам, я терял имя столбца в БД сервера SQL, однако следование этому синтаксису помогло мне сохранить и ColumnName
Похожие вопросы:
Я использовал функцию substr в своем запросе sql: UPDATE staff SET dept_id=’.$department.’, SUBSTR(auth, 0, 1) = ‘l’ WHERE staffid=’.$name.’ . но запрос не выполняется: Ошибка: у вас есть ошибка в.
Привет, в отличие от того, что я нашел в интернете, мне нужно заменить 0 на null, чтобы в таблице у меня было null вместо 0. В настоящее время я сделал следующее: SET ANSI_NULLS ON GO SET.
По-видимому, NUMBER + NULL возвращает NULL в SQL. Поэтому мне нужно добавить 0 вместо NULL, но это не работает, я получаю синтаксическую ошибку. Я смотрю на документы, и вот что там написано, так.
Я хочу знать, что или означают в приведенном ниже запросе public static int EnsureObjectHasAliases(string type, int id, int programId, string[] aliasList)
Я хочу получить 0 вместо null в моем запросе select. Я имею в виду, что в настоящее время мой запрос показывает NULL для столбца суммы, если в таблице нет записей. Могу ли я получить 0 для столбца.
У меня есть длинный запрос SQL, и мне нужно изменить его, выполнив поиск и замену для найденных ниже строк. Не могли бы вы сообщить мне, пожалуйста, самый простой способ достичь этого? 1) Поиск и.
Я хочу заменить значение null в вычисляемом столбце на 0 в запросе SQL Server. Это мой вопрос. SELECT Scenario, sum_amount + sum_cash + sum_tips AS total_earned FROM Cash_Scenario WHERE scenario_Id.
В приведенном ниже запросе я сохраняю в базе данных массив из нескольких вариантов select2. Здесь у меня есть таблица базы данных участников с event_id(int, а не null), user_id(int, null).
Транскрипция изображений: FTE/RATE CARD | 2018-01-01 | 2018-02-01 | 2018-03-01 | 2018-04-01 | 2018-05-01 | 2018-06-01 | .
Пожалуйста, позвольте мне задать вопрос о том, как заменить пустое значение & NULL в SELECT. У меня есть столбец, который определяется VARCHAR, как показано ниже. Он имеет пустые и NULL значения.
Функция SQL COALESCE возвращает первое определённое, то есть не-NULL значение из списка её аргументов. Обычно одним или несколькими аргументами функции COALESCE является столбец таблицы, к которой обращён запрос. Нередко аргументом функции является и подзапрос. Это делается тогда, когда невозможно с уверенностью утверждать, что подзапрос вернёт какое-либо определённое значение, например, 5, «строка», ‘2018-12-09’ и т. д., а не значение NULL. Тогда это NULL-значение будет заменено на следующее сразу же за ним определённое значение.
Приведём простые примеры пока без имён столбцов и подзапросов.
COALESCE для простой замены NULL-значения
При создании таблицы базы данных можно для ряда столбцов предусмотреть значения по умолчанию NULL. Тогда, если при вставке новой строки в такой столбец не вставить никакого значения, его значение будет неопределённым (NULL). Однако при выводе данных неопределённое (его ещё можно назвать пустым) значение не всегда пригодно. В таких случаях используется функция COALESCE.
В первых примерах работаем с базой данных библиотеки и её таблицей «Книга в выдаче» (BOOKINUSE). Операции будут относиться к столбцам Author (автор книги) и Title (название книги).
Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке .
Скрипт для создания базы данных библиотеки, её таблиц и заполения таблиц данными — в файле по этой ссылке .
Пример 1. Есть база данных библиотеки и таблица «Книга в выдаче» (BOOKINUSE). Таблица выглядит так:
Author | Title | Pubyear | Inv_No | Customer_ID |
Толстой | Война и мир | 2005 | 28 | 65 |
Чехов | Вишневый сад | 2000 | 17 | 31 |
Чехов | Избранные рассказы | 2011 | 19 | 120 |
Чехов | Вишневый сад | 1991 | 5 | 65 |
Ильф и Петров | Двенадцать стульев | 1985 | 3 | 31 |
Маяковский | Поэмы | 1983 | 2 | 120 |
Пастернак | Доктор Живаго | 2006 | 69 | 120 |
Толстой | Воскресенье | 2006 | 77 | 47 |
Толстой | Анна Каренина | 1989 | 7 | 205 |
Пушкин | Капитанская дочка | 2004 | 25 | 47 |
Гоголь | Пьесы | 2007 | 81 | 47 |
Чехов | Избранные рассказы | 1987 | 4 | 205 |
Пушкин | Сочинения, т. 1 | 1984 | 6 | 47 |
Пастернак | Избранное | 2000 | 137 | 18 |
Пушкин | Сочинения, т.2 | 1984 | 8 | 205 |
NULL | Наука и жизнь 9 2018 | 2019 | 127 | 18 |
Чехов | Ранние рассказы | 2001 | 171 | 31 |
Как видим, в последней строке отсутствует определённное значение столбца Author, так как выданное издание является журналом. Пусть требуется вывести авторов выданных изданий с определёнными инвентарными номерами и при этом ни одно из полей не должно быть пустым. Для этого пишем запрос с использованием фукнции COALESCE:
Для издания с инвентарным номером 127 будет возвращено первое не-NULL значение — ‘Журнал’ и результирующая таблица будет выглядеть так:
InUse |
Пушкин |
Гоголь |
Журнал |
В информационных системах почти никогда не допускаются пустые строки как результат запроса. Если что-то, что было указано в запросе, отстустствует, то в результирующей строке должно быть указано 0, если речь идёт о количестве, либо «Отсутствует», если требуется текстовый ответ, либо другой подходящий по типу данных результат.
Пример 2. Вновь работаем с таблицей BOOKINUSE базы данных библиотеки. Требуется вывести количество изданий определённого автора, находящихся в выдаче. В таблице видим, что в выдаче находится одна книга Пушкина. Проверяем. Пишем следующий запрос с использованием функции COALESCE:
Результат выполнения этого запроса:
InUse |
3 |
Но среди выданных изданий отстутствуют книги Булгакова. Проверяем. Пишем аналогичный запрос, меняем лишь автора:
Результат выполнения этого запроса:
InUse |
0 |
Таким образом, функция COALESCE вернула первое не-NULL значение: 0 и вместо пустой строки мы получили строку со значением 0.
COALESCE для выбора альтернативы
Нередко некоторое результирующее значение основывается в зависимости от случая на значениях разных столбцов таблицы. Тогда, как правило, не участвующие в формировании результирующего значения значения столбца пусты. Для выбора необходимого столбца применяется функция COALESCE.
Пример 3. В базе данных фирмы есть таблица STAFF, по данным которой можно вычислить годовой доход сотрудника.
ID | LName | Salary | Comm | Sales |
1 | Johnson | 12300 | NULL | NULL |
2 | Brown | NULL | 600 | 24 |
3 | MacGregor | 1420 | NULL | NULL |
4 | Calvin | NULL | 780 | 18 |
5 | Levy | 11400 | NULL | NULL |
6 | Right | NULL | 800 | NULL |
Если сотрудник получает фиксированную заработную плату (Salary), то значения столбцов Комиссионные (Comm) и Сделки (Sales) пусты (NULL). В таком случае для получения годового дохода следует размер заработной платы умножить на 12. Если же сотрудик получает комиссионные, то значение столбца Salary пусто (NULL). Возможны также случаи, когда сотруднику назначены комиссионные, но он не провёл ни одной сделки. Тогда значение столбца Sales пусто (NULL). В первом случае функция COALESCE возвращает значение Salary*12, во втором — Comm*Sales, в третьем — 0. Итак, для вычисления годового дохода сотрудников пишем следующий запрос с использованием функции COALESCE:
Результатом выполнения запроса будет следующая таблица:
LName | Income |
Johnson | 147600 |
Brown | 14400 |
MacGregor | 170400 |
Calvin | 14040 |
Levy | 136800 |
Right | 0 |
COALESCE помогает избежать неопределённости в вычислениях
В соединениях таблиц часто невозможно заранее предположить, всем ли значениям некоторого столбца из одной таблице соответствует определённое значение из другой таблице. В случае несоответствия значение является неопределённым (NULL). Но именно на основании этого значения должны производиться дополнительные вычисления. Другая причина, по которой в сложных вычислениях часто применяется функция COALESCE, состоит в том, что запрещается применять агрегатные функции от агрегатной функции, например, SUM(COUNT(*).
Работаем с базой данных «Театр». Таблица Play содержит данные о постановках. Таблица Team — о ролях актёров. Таблица Actor — об актёрах. Таблица Director — о режиссёрах. Поля таблиц, первичные и внешние ключи можно увидеть на рисунке ниже (для увеличения нажать левой кнопкой мыши).
Пример 4. В таблице Team есть столбец MainTeam, содержащий данные о том, является ли роль главной. Если является, то значение столбца — Y, если нет — N. Требуется вывести список актёров с фамилиями и количеством второстепенных ролей.
Потребуется соединение таблиц. Как мы уже замечали, в соединении таблиц Play (постановка) и Team (роль) некоторые значения столбцов могут быть неопределёнными из-за того, что не у всех актёров в каждой постановке обязательно есть и главые, и второстепенные роли. Кроме того, в качестве количества второстепенных ролей требуется подсчитать сумму (SUM) числа строк (COUNT(*)), соответствующих определённому актёру, в которых указано, что роль является второстепеннной. Но использование вложенных агрегатных функций запрещено. В этом случае пишется запрос с применением функции COALESCE, возвращаемое которой значение уже формально не является значением агрегатной функции:
mysql — заменить ноль на ноль в sql-запросе
спросил
Изменено
3 года, 11 месяцев назад
Просмотрено
6к раз
У меня есть SQL-запрос, который потенциально может возвращать нулевые значения, в этом случае я хочу, чтобы запрос возвращал «0». Вот запрос
ВЫБЕРИТЕ (выберите количество (цель) из приспособлений, где цель = «1» и приспособление = «$ приспособление») как targetCountHome из приспособлений, где приспособление='$fixture'LIMIT 1
Любая помощь очень ценится!
- MySQL
- SQL
8
В MySql используйте функцию IFNULL(). Для MsSql используйте функцию ISNULL().
Если вы используете MySql, должно подойти IFNULL(
.
Этот запрос:
ВЫБЕРИТЕ (выберите количество (цель) из приспособлений, где цель = «1» и приспособление = «$ приспособление») как targetCountHome ИЗ светильников ГДЕ приспособление = '$ приспособление' ПРЕДЕЛ 1
не может вернуть NULL
значений. Подзапрос представляет собой запрос агрегации без GROUP BY
, поэтому он всегда возвращает одну строку. Эта строка будет содержать результат COUNT()
. COUNT() Сама функция
никогда не может вернуть значение NULL
. Если строк нет, то значение будет равно нулю.
Внешний запрос может вернуть без строк , но это отличается от значений NULL
.
Конечно, этот запрос слишком сложен и должен быть просто:
SELECT COUNT(*) as targetCountHome ИЗ светильников ГДЕ приспособление = ? И -- передать это как параметр цель = 1 ; -- это выглядит как число, поэтому я предполагаю, что это
Обратите внимание, что вы должны передавать параметры, используя правильные параметры, а не искажая строки запроса.
0
, если вам нужны все строки, а не строки, где цель не равна нулю, вы можете использовать count(*)
select count(*) из светильников где цель=1 и приспособление = '$ приспособление'
count(goal)
вернуть количество строк, где цель не равна нулю
count(*)
вернуть общее число выбранных строк
в противном случае, когда вам не нужны нулевые значения в mysql, вы можете ifnull(your_column, value) или объединение(your_column, value)
на основе вашего комментария вам нужна сумма (цель)
выберите сумму (ifnull (цель, 0)) из светильников где цель=1 и приспособление = '$ приспособление'
7
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.
Функция NVL — заменить NULL — миграция Oracle на SQL Server
В Oracle функция NVL( exp1 , exp2 ) принимает 2 выражения (параметра) и возвращает первое выражение, если оно равно , а не NULL, иначе
NVL возвращает второе выражение.
В SQL Server вы можете использовать функцию ISNULL ( exp1 , exp2 ).
Пример Oracle:
-- Вернуть «Н/Д», если имя равно NULL ВЫБЕРИТЕ NVL(имя, 'Н/Д') ИЗ стран;
Пример SQL Server:
-- Вернуть «Н/Д», если имя равно NULL ВЫБЕРИТЕ ISNULL(имя, 'Н/Д') ИЗ стран;
Сводка по преобразованию Oracle NULL в SQL Server:
Oracle | SQL Server | ||
Синтаксис | NULL( exp1 , exp2 ) | ISNULL( exp1 , exp2 ) | |
Альтернативы | CASE | CASE | Совместимость с ANSI SQL |
ОБЪЕДИНЕНИЕ | ОБЪЕДИНЕНИЕ | ||
NVL2 | IIF | Начиная с SQL Server 2012 |
Последнее обновление : Oracle 11g R2 и Microsoft SQL Server 2012
В Oracle функция NVL используется для замены NULL указанным значением и может быть преобразована в функцию ISNULL в SQL Server.