Как в 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)
не относится это к вам совершенно 🙂
Ваш ответ и был-то единственным полезным
SQL имеет запрос. Как убрать null и поставить вместо него 0
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 в запросе сервера SQL
Я разработал запрос, и в результатах для первых трех столбцов я получаю 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 значения.
Функция COALESCE: SQL возвращает первое не-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, возвращаемое которой значение уже формально не является значением агрегатной функции: