Подтвердить что ты не робот

SQL: сумма 3 столбца, когда один столбец имеет нулевое значение?

SELECT 
    sum(TotalHoursM)
          + (TotalHoursT)
          + (TotalHoursW)
          + (TotalHoursTH)
          + (TotalHoursF) 
          AS TOTAL
FROM LeaveRequest
4b9b3361

Ответ 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

Ответ 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)