Как я могу заменить значение NULL или 0 на dash(-) или пустую строку

#sql #sql-server

#sql #sql-сервер

Вопрос:

Я хочу вернуть строку (-) dash или пустое значение, когда возвращаемое значение равно нулю, ниже приведен вывод, первый столбец ([Всего 1]) — это исходный запрос SUM (), второй столбец ([Всего 2]) — это результат, который я хочу, он работает, но код повторяется и выглядит громоздким, есть ли более чистый способ?

     SELECT 
    SUM(CASE 
        WHEN ( DATEDIFF(day,OrderDate,GETDATE()) = 0 ) THEN 1 
        WHEN ( DATEDIFF(day,BookingDate,GETDATE()) = 0 ) THEN 1              
    END) AS [Total 1],
 
    (CASE 
        WHEN (SUM(CASE 
                        WHEN ( DATEDIFF(day,OrderDate,GETDATE()) = 0 ) THEN 1 
                        WHEN ( DATEDIFF(day,BookingDate,GETDATE()) = 0 ) THEN 1              
                    END) IS NULL)
        THEN '-' 
        ELSE
            CAST(SUM(CASE 
                WHEN ( DATEDIFF(day,OrderDate,GETDATE()) = 0 ) THEN 1 
                WHEN ( DATEDIFF(day,BookingDate,GETDATE()) = 0 ) THEN 1              
            END) AS VARCHAR(20))
            end 
    ) AS [Total 2]
FROM TABLE
  

Спасибо.

Комментарии:

1. ISNULL / COALESCE .

2. Используйте ISNULL / COALESCE .

3. Спасибо. Я пробовал их использовать, но он всегда будет возвращать 0 или null. Также необходимо использовать convert() после ответа Гордона. в любом случае, еще раз спасибо!

Ответ №1:

Вы должны преобразовать значение в строку. Если вы используете CASE выражение, вам нужно повторить SUM() . Другой метод заключается в вложении NULLIF() и COALESCE() :

 COALESCE(NULLIF(CONVERT(VARCHAR(255),
                        SUM(CASE WHEN ( DATEDIFF(day,OrderDate,GETDATE()) = 0 ) THEN 1 
                                 WHEN ( DATEDIFF(day,BookingDate,GETDATE()) = 0 ) THEN 1              
                            END), 0
                       )
               ), '-'
        ) AS [Total 1],
  

Этот тип операции довольно громоздок в SQL. Часто это лучше делать на уровне приложения.

Комментарии:

1. Потрясающе!! Я попробовал только две комбинации из трех функций в запросе!! Большое вам спасибо!