0

次の SQL ステートメントで「OR」条件を使用したいのですが、その方法を教えてください。

   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 

上記のステートメントで OR 条件を使用するのを手伝ってください。OR 条件の 3 つのステートメントをチェックする必要があります。

4

2 に答える 2

2

WHERE句を忘れたようです:

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)
于 2013-03-29T06:39:49.220 に答える
0

同じ質問を投稿するのはこれで 2 回目です。

OR 条件を使用しています。

優先順位や検索条件を理解していないか、データが想定と異なるかのいずれかです。

順序は次のとおりです:
ビット単位 (これらのいずれもありません)
()
Not
And
Or

クエリを分解します。

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

次に、
AND PortfolioId =@portfolioID を、every または 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
于 2013-03-29T14:57:22.997 に答える