Solved

SQL: AND or OR logic

Posted on 2014-10-21
4
127 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
4 Comments
 
LVL 40

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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
SQL 2012 AOG and SQL2014 AOG 76 59
T-SQL Import data in Microsoft SQL Server Management Studio using INSERT 3 22
Related to SQL Query 5 19
SQL query 7 11
In this article I will describe the Copy Database Wizard method as one possible migration process and I will add the extra tasks needed for an upgrade when and where is applied so it will cover all.
How to leverage one TLS certificate to encrypt Microsoft SQL traffic and Remote Desktop Services, versus creating multiple tickets for the same server.
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.

740 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