#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. Потрясающе!! Я попробовал только две комбинации из трех функций в запросе!! Большое вам спасибо!