SELECT
sum(TotalHoursM)
+ (TotalHoursT)
+ (TotalHoursW)
+ (TotalHoursTH)
+ (TotalHoursF)
AS TOTAL
FROM LeaveRequest
SQL: сумма 3 столбца, когда один столбец имеет нулевое значение?
Ответ 1
Если столбец имеет значение 0, вы в порядке, я предполагаю, что у вас есть проблема с значением Null, в этом случае вам нужно будет использовать IsNull(Column, 0)
, чтобы гарантировать, что он всегда равен 0.
Ответ 2
Предыдущие ответы с использованием функции ISNULL
верны только для MS Sql Server. Функция COALESCE
также будет работать в SQL Server. Но также будет работать в стандартных системах баз данных SQL. В приведенном примере:
SELECT sum(COALESCE(TotalHoursM,0))
+ COALESCE(TotalHoursT,0)
+ COALESCE(TotalHoursW,0)
+ COALESCE(TotalHoursTH,0)
+ COALESCE(TotalHoursF,0) AS TOTAL FROM LeaveRequest
Это идентично решению ISNULL
единственное отличие состоит в названии функции. Оба работают в SQL Server, но COALESCE
- это стандарт ANSI, а ISNULL
- нет. Кроме того, COALESCE
более гибок. ISNULL
будет работать только с двумя параметрами. Если первый параметр равен NULL, то возвращается значение второго параметра, в противном случае возвращается значение первого. COALESCE примет от 2 до 'n' (я не знаю предела 'n') параметров и вернет значение первого параметра, который не равен NULL
. Когда есть только два параметра, эффект такой же, как и у ISNULL
.
Ответ 3
SELECT sum(isnull(TotalHoursM,0))
+ isnull(TotalHoursT,0)
+ isnull(TotalHoursW,0)
+ isnull(TotalHoursTH,0)
+ isnull(TotalHoursF,0)
AS TOTAL FROM LeaveRequest
Ответ 4
Для справки эквивалентный оператор для MySQL: IFNull (столбец, 0).
Этот оператор оценивает как значение столбца, если не null, в противном случае он вычисляется как 0.
Ответ 5
Вы можете использовать ISNULL
:
ISNULL(field, VALUEINCASEOFNULL)
Ответ 6
похоже, что вы хотите использовать СУММ все столбцы (я не уверен, откуда приходит сумма 3 столбца), а не только TotalHoursM, поэтому попробуйте следующее:
SELECT
SUM( ISNULL(TotalHoursM ,0)
+ ISNULL(TotalHoursT ,0)
+ ISNULL(TotalHoursW ,0)
+ ISNULL(TotalHoursTH ,0)
+ ISNULL(TotalHoursF ,0)
) AS TOTAL
FROM LeaveRequest
Ответ 7
Вы также можете использовать nvl(Column,0)
Ответ 8
Я бы попробовал это:
select sum (case when TotalHousM is null then 0 else TotalHousM end)
+ (case when TotalHousT is null then 0 else TotalHousT end)
+ (case when TotalHousW is null then 0 else TotalHousW end)
+ (case when TotalHousTH is null then 0 else TotalHousTH end)
+ (case when TotalHousF is null then 0 else TotalHousF end)
as Total
From LeaveRequest
Ответ 9
Если вы хотите избежать нулевого значения, используйте IsNull (Column, 1)