Neo
Neo

Reputation: 16239

How to use `OR` condition in sql statement?

I want to use 'OR' condition in following sql statement please help me to do so.

   SELECT DATE, SecurityId
    FROM StateStreet
    INNER JOIN Securities ON StateStreet.SecurityID = Securities.securityid
    AND (     (SecurityName LIKE '% R V %'
               AND Quantity < 0
               AND PortfolioId =@portfolioID)
           OR (SecurityName NOT LIKE '% R V %'
               AND Quantity > 0
               AND PortfolioId=@PortfolioID)
           OR (Value = Quantity
               AND Securities.PortfolioId =@PortfolioID) 
         )
   WHERE CONVERT(DATETIME,PeriodEndDate) = @PositionDate 

Please help me to use OR condition in above statement, I need to check 3 statements in OR condition.

Upvotes: 0

Views: 190

Answers (2)

paparazzo
paparazzo

Reputation: 45106

This is the second time you posted the same question.

You are using OR conditions.

Either you don't understand the precedence, search conditions, or the data is not what you assume.

The order is:
bitwise (you don't have any of those)
()
Not
And
Or

Break the query down.

SELECT DATE, SecurityId, SecurityName, Quantity, Value, PortfolioId
FROM StateStreet
INNER JOIN Securities 
   ON StateStreet.SecurityID = Securities.securityid
WHERE CONVERT(DATETIME,PeriodEndDate) = @PositionDate 

Then
You can pull AND PortfolioId =@portfolioID up as it is in every or as an and

SELECT DATE, SecurityId, SecurityName, Quantity, Value, PortfolioId
FROM StateStreet
INNER JOIN Securities 
   ON StateStreet.SecurityID = Securities.securityid 
  AND PortfolioId = @portfolioID
WHERE CONVERT(DATETIME,PeriodEndDate) = @PositionDate 

SELECT DATE, SecurityId, SecurityName, Quantity, Value, PortfolioId
FROM StateStreet
INNER JOIN Securities 
   ON StateStreet.SecurityID = Securities.securityid 
  AND PortfolioId = @portfolioID
  AND (      Value = Quantity
        OR ( SecurityName LIKE '% R V %' )
      )
WHERE CONVERT(DATETIME,PeriodEndDate) = @PositionDate

Upvotes: 0

MarcinJuraszek
MarcinJuraszek

Reputation: 125660

Looks like you forgot about WHERE clause:

SELECT 
    DATE,
    SecurityId              
FROM
    StateStreet 
INNER JOIN
    Securities ON StateStreet.SecurityID =  Securities.securityid 
WHERE
    (SecurityName LIKE '% R V %' AND Quantity < 0  AND PortfolioId = @portfolioID)
OR
    (SecurityName NOT LIKE '% R V %' AND Quantity > 0  AND PortfolioId = @PortfolioID)
OR
    (Value = Quantity AND Securities.PortfolioId = @PortfolioID)

Upvotes: 2

Related Questions