проверить, является ли значение NULL или меньше 0 в одной инструкции TSQL - PullRequest
15 голосов
/ 27 мая 2010
ISNULL(SUM(MyTable.Total), 0) AS Total

Как я могу изменить вышеприведенное утверждение, чтобы также проверить, если Total меньше 0 (ноль) , так что если Total равно NULL или меньше 0 (отрицательный) , присвойте 0 Всего

Ответы [ 9 ]

23 голосов
/ 27 мая 2010
CASE WHEN ISNULL(SUM(MyTable.Total), 0) <= 0 THEN 0
     ELSE SUM(MyTable.Total)
END AS Total
7 голосов
/ 27 мая 2010
CASE 
WHEN COALESCE(SUM(MyTable.Total), 0) <= 0 THEN 0
ELSE SUM(MyTable.Total)
END AS [Total]
4 голосов
/ 11 марта 2015

Просто чтобы быть другим ...

ISNULL(SUM(Total) * NULLIF(SIGN(SUM(Total)), -1), 0)
1 голос
/ 19 мая 2014

@SQL.NET Warrior, я создал для вас функцию. Он принимает целое число в качестве параметра и возвращает 0 для NULL или отрицательных значений.

--this statements ensure we drop the function before recreating it
IF EXISTS(SELECT * FROM sysobjects WHERE xtype = 'FN' AND name = 'nonNullNegative')
BEGIN
    DROP FUNCTION dbo.nonNullNegative
END
GO

--the real function definition
CREATE FUNCTION dbo.nonNullNegative(@numValue INT)
RETURNS INT
AS
BEGIN
  DECLARE @newValue AS INT; 
    SET @newValue= CASE WHEN ISNULL(@numValue,0)<=0 THEN 0 ELSE @numValue
END
    RETURN  @newValue;
END
GO



use MyDatabase;

--use it like this
SELECT dbo.nonNullNegative(-2);--outputs 0
1 голос
/ 27 мая 2010
CASE WHEN 
  COALESCE(SUM(MyTable.Total),0) <= 0 
THEN 
   0 
ELSE 
  SUM(MyTable.Total)
END AS Total
0 голосов
/ 31 октября 2017
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Haluk Alkın Turan
-- Create date: 2017-10-31
-- Description: Simulates ORACLE's GREATEST Function
-- Usage: select dbo.getGreatest(1,2)
-- =============================================
CREATE FUNCTION getGreatest
(
    @val1 sql_variant,
    @val2 sql_variant
)
RETURNS sql_variant
AS
BEGIN
    RETURN (SELECT MAX(i) FROM (VALUES (@val1), (@val2)) AS T(i))
END
GO
0 голосов
/ 29 августа 2014
select greatest(0, -1) FROM DUMMY

Возвращает 0

select greatest(0, 1) FROM DUMMY

Возвращает 1

0 голосов
/ 08 февраля 2013

В Postgresql нет функции IS NULL, которую вы можете сделать:

CASE WHEN SUM(MyTable.Total) > 0 THEN SUM(MyTable.Total) ELSE 0 END AS Total
0 голосов
/ 27 мая 2010

Как насчет

SUM(ISNULL(MyTable.Total, 0)) AS Total

Я предпочитаю это, поскольку реализация NULL в базах данных не всегда логична и различается у разных поставщиков и в зависимости от того, включены ANSI_NULLS или нет.

например. СУММА NULL, NULL и 1 возвращается как 1, но (1 + NULL + NULL) равно NULL ...

Затем вы можете сделать меньше 0 с помощью CASE, как указано выше, таким образом

CASE 
WHEN SUM(ISNULL(MyTable.Total,0)) <= 0 THEN 0
ELSE SUM(ISNULL(MyTable.Total,0))
END AS [Total]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...