2016-07-07 5 views
3

내 SELECT 쿼리는 모두 아래에서 작동하며 두 개의 개별 결과로 값을 반환합니다. 첫 번째 SELECT 문이 0을 반환하고 작업의 특성으로 인해 두 번째 작업이 가능한 경우 0을 반환하는 첫 번째 작업을 무시하고 실행하고 싶습니다. 첫 번째 결과가 0보다 큰 결과를 반환하는 경우 두 번째 실행을 원하지 않습니다.SQL - 두 번째 실행 쿼리 결과가 0 일 경우

저는 다름 아닌 IF ELSE와 같은 것을 찾고 있지만 사용 된 특정 날짜/시간 공식으로 인해 가능하지 않다고 생각합니다. 그렇지 않으면이 모든 것을 다시 작성해야 할 수도 있습니다. 이것에 대한 목적이 있지만 나는 당신을 지루하게하지 않을 것입니다. 미리 감사드립니다!

Declare @StartDate as DateTime 
Declare @EndDate as DateTime 
Declare @TodaysDate as DateTime 
Declare @Previous as DateTime 
Declare @Previous2 as DateTime 

set @TodaysDate = GETDATE() 
set @Previous = DATEADD(day,-1,@TodaysDate) 
set @Previous2 = DATEADD(day,-2,@TodaysDate) 

-- SELECT Statetment one starts here 

set @StartDate = cast(convert(varchar(4), datepart(yyyy, getdate())) + '-' + 
convert(varchar(2), datepart(mm, @Previous)) + '-' + 
convert(varchar(2), datepart(dd, @Previous)) + ' ' + 
'05:00' as datetime) 
set @EndDate = cast(convert(varchar(4), datepart(yyyy, getdate())) + '-' + 
convert(varchar(2), datepart(mm, @Previous)) + '-' + 
convert(varchar(2), datepart(dd, @Previous)) + ' ' + 
'16:59' as datetime) 

SELECT Count(*) as FirstShfitPrevious 
FROM [TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] 
WHERE Close_Time_Stamp between @StartDate and @EndDate 

-- Query 2 Starts, Declarations already made at beginning 

set @StartDate = cast(convert(varchar(4), datepart(yyyy, getdate())) + '-' + 
convert(varchar(2), datepart(mm, @Previous2)) + '-' + 
convert(varchar(2), datepart(dd, @Previous2)) + ' ' + 
'05:00' as datetime) 
set @EndDate = cast(convert(varchar(4), datepart(yyyy, getdate())) + '-' + 
convert(varchar(2), datepart(mm, @Previous2)) + '-' + 
convert(varchar(2), datepart(dd, @Previous2)) + ' ' + 
'16:59' as datetime) 

SELECT Count(*) as FirstShfitPrevious2 
FROM [TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] 
WHERE Close_Time_Stamp between @StartDate and @EndDate 
+0

간단한 'if'구문을 사용할 수 없습니까? – FDavidov

답변

0

그런 다음 NOT이 존재

declare @myVar int 

SELECT @myVar = Count(*) as FirstShfitPrevious 
FROM [TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] 
WHERE Close_Time_Stamp between @StartDate and @EndDate) 

if(@myVar = 0) 
//Here your second query logic 
begin 
set @StartDate = cast(convert(varchar(4), datepart(yyyy, getdate())) + '-' + 
convert(varchar(2), datepart(mm, @Previous2)) + '-' + 
convert(varchar(2), datepart(dd, @Previous2)) + ' ' + 
'05:00' as datetime) 
set @EndDate = cast(convert(varchar(4), datepart(yyyy, getdate())) + '-' + 
convert(varchar(2), datepart(mm, @Previous2)) + '-' + 
convert(varchar(2), datepart(dd, @Previous2)) + ' ' + 
'16:59' as datetime) 

SELECT Count(*) as FirstShfitPrevious2 
FROM [TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] 
WHERE Close_Time_Stamp between @StartDate and @EndDate 
end 
+0

이상 -'select @myVar = count (*) ... ' –

+1

@ZoharPeled : - 예, 업데이트했습니다! –

+0

이 문제는 전에 시도한 적이 있지만 "As"플래그가있어 문이 실패합니다. FirstShiftPrevious를 실행하면 실행되지만 wuery가 반환 된 데이터없이 성공적으로 실행되었다는 메시지가 나타납니다. – Edward

0

사용과 같은 값을 확인 후 변수에 첫 번째 질의 결과 값을 저장하고 시도 할 수 있습니다 ..

if NOT Exists 
(Select 1 as FirstShfitPrevious--first query 
FROM [TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] 
WHERE Close_Time_Stamp between @StartDate and @EndDate 
) 
Begin 
SELECT Count(*) as FirstShfitPrevious2--second query 
FROM [TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] 
WHERE Close_Time_Stamp between @StartDate and @EndDate 
END 
Else 
Begin 
--First query 
End 
+0

Shift가 끝나서 내일 다시 확인해 보겠습니다. 유망 해 보인다. – Edward

0

또는 그런 식으로 :

SELECT TOP 1 Count(*) as FirstShfitPrevious2 
FROM [TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] 
WHERE Close_Time_Stamp between @StartDate and @EndDate 
GROUP BY CAST(Close_Time_Stamp AS DATE) 
ORDER BY CAST(Close_Time_Stamp AS DATE) DESC 

perio 두 날짜 범위를 다룹니다.

+0

나는 이것을 시도하고 입력 해 주셔서 감사하지만 결과는 동일한 결과를 얻는 원래 쿼리와 동일합니다. 0에서 표시하지 않으려면 첫 번째 결과를 제거하고 싶습니다. – Edward

+0

(이것이 전체 소스 인 경우) 가능하지 않습니다. groups of of groups_에서'count (*) = 0'을 얻을 수 없습니다. 조건과 일치하는 행이 없으면 _no group_이 있습니다. 참고 : 두 기간을 모두 포함하는 _ ** ** _ **. '@ startdate' - 가장 낮은 것 -'dateadd (-2)' –

+1

그래서이 제안들 중 어느 것도 작동하지 않으며 다시 한번 감사드립니다. 나는 누락 된 날짜와 모든 제로와 관련된 문제들을 봅니다. 나는 그것이 현재의 상태라고 묻는 것을하는 것은 불가능하다고 생각합니다. 협력자가 설정 한 "WHILE"작업을 시도하고 작업하면서 원하는 데이터를 얻을 수 없는지 확인합니다. Stack에서의 모든 노력을 다시 한번 ITHANKS! – Edward

관련 문제