#sql #sql-server #sql-server-2014
#sql #sql-сервер #sql-server-2014
Вопрос:
Поскольку мой запрос иногда возвращает 0 строк, мне нужно выбрать другой оператор, если он возвращает 0 строк.
select MR.NAME as NAMES,Isnull(cast(sum(MTTR/Month(getdate())) as decimal(18,2)),0) as YTDCURRENTYEAR from #Meantimeresult as MR
where YEAR(CONVERT(DATE, '01-' Month)) = YEAR(GETDATE()) AND MONTH(CONVERT(DATE, '01-' Month)) <= MONTH(GETDATE())
group by MR.NAMES
2-й оператор
Select NAME='' ,YTDCURRENTYEAR=0
Комментарии:
1. Если ваш запрос выполняется каким-либо кодом (c #, vb, f #, java и т.д.), Такого рода задача может быть выполнена кодом гораздо более простым способом.
2. @Srikanth . . . Вы должны предоставить образцы данных, желаемые результаты и объяснение логики. Вероятно, есть более простой способ написать логику.
Ответ №1:
IF NOT EXISTS (YOUR FIRST QUERY)
BEGIN
YOUR SECOND QUERY
END
Ответ №2:
Вы можете обернуть свой первый запрос общим табличным выражением и использовать объединение всех:
WITH CTE AS
(
SELECT MR.NAME as NAMES, Isnull(cast(sum(MTTR/Month(getdate())) as decimal(18,2)),0) as YTDCURRENTYEAR
FROM #Meantimeresult as MR
WHERE YEAR(CONVERT(DATE, '01-' Month)) = YEAR(GETDATE())
AND MONTH(CONVERT(DATE, '01-' Month)) <= MONTH(GETDATE())
GROUP BY MR.NAMES
)
SELECT Names, YTDCURRENTYEAR
FROM CTE
UNION ALL
SELECT NAME='' ,YTDCURRENTYEAR=0
WHERE NOT EXISTS(
SELECT 1
FROM CTE
)