Solved

SQL: AND or OR logic

Posted on 2014-10-21
4
117 Views
Last Modified: 2014-10-22
I have a stored procedure where @DateRangeTypeCancellation is either true or false.

When true, I need to return records where:
if ( CA.CancellationEffectiveDate < PolCancelDate.MinCancelDate ) then CA.CancellationEffectiveDate between dates

if ( CA.CancellationEffectiveDate > PolCancelDate.MinCancelDate ) then PolCancelDate.MinCancelDate between dates

I think the below code does that, but I'm not sure if the "AND" on line 5 should be an OR?

WHERE 
(
	@DateRangeTypeCancellation = 0 OR  
	((CA.CancellationEffectiveDate < PolCancelDate.MinCancelDate AND CA.CancellationEffectiveDate BETWEEN @startDate and @endDate) 
	AND
	(CA.CancellationEffectiveDate > PolCancelDate.MinCancelDate AND PolCancelDate.MinCancelDate BETWEEN @startDate and @endDate))
)

Open in new window

0
Comment
Question by:pzozulka
4 Comments
 
LVL 39

Expert Comment

by:lcohan
ID: 40395314
You could also do it in two separate SELECT queries and use UNION (for distinct rows) or UNION ALL between the two SELECT statements where you can have different WHERE clause in each.
0
 
LVL 65

Accepted Solution

by:
Jim Horn earned 500 total points
ID: 40395322
>if ( CA.CancellationEffectiveDate < PolCancelDate.MinCancelDate ) then CA.CancellationEffectiveDate between dates
>if ( CA.CancellationEffectiveDate > PolCancelDate.MinCancelDate ) then PolCancelDate.MinCancelDate between dates
Since only one of the above can exists at the same time, it would be OR.
Also, is there an = that needs to be handled?
Also, might want to add Line 3 of the below
WHERE (
   @DateRangeTypeCancellation = 0 OR  
  (@DateRangeTypeCancellation = 1 AND (
(CA.CancellationEffectiveDate < PolCancelDate.MinCancelDate AND CA.CancellationEffectiveDate BETWEEN @startDate and @endDate) 
   OR
   (CA.CancellationEffectiveDate > PolCancelDate.MinCancelDate AND PolCancelDate.MinCancelDate BETWEEN @startDate and @endDate))

Open in new window

)
0
 
LVL 8

Author Comment

by:pzozulka
ID: 40395350
Jim: I don't know if line 3 in your code is required because the OR on line 2 would implicitly make that happen.
In other words, if @DateRangeTypeCancellation is set to 0, then the following: @DateRangeTypeCancellation = 0
will evaluate to TRUE, and the rest will get skipped because of the OR.

However, if @DateRangeTypeCancellation is set to 1, then the following: @DateRangeTypeCancellation = 0
will evaluate to FALSE, and the rest of the expression will be evaluated because of the OR.
0
 
LVL 11

Expert Comment

by:John_Vidmar
ID: 40395821
WHERE	@DateRangeTypeCancellation = 0
OR	(	@DateRangeTypeCancellation = 1
	AND	CASE	WHEN CA.CancellationEffectiveDate < PolCancelDate.MinCancelDate
			THEN CA.CancellationEffectiveDate
			ELSE PolCancelDate.MinCancelDate
		END BETWEEN @startDate and @endDate
	)

Open in new window

0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Why is this different from all of the other step by step guides?  Because I make a living as a DBA and not as a writer and I lived through this experience. Defining the name: When I talk to people they say different names on this subject stuff l…
If you have heard of RFC822 date formats, they can be quite a challenge in SQL Server. RFC822 is an Internet standard format for email message headers, including all dates within those headers. The RFC822 protocols are available in detail at:   ht…
Familiarize people with the process of utilizing SQL Server functions from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Ac…
Via a live example, show how to set up a backup for SQL Server using a Maintenance Plan and how to schedule the job into SQL Server Agent.

861 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now