Reputation: 16239
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
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
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