0

これは私の現在のSQLクエリです。これを変更する必要があります

SELECT 
    18 BrokerDealerID,
    5 PortfolioID,
    PeriodEndDate DATE,
    SecurityIdentifier_All.SecurityId,
    MAX(
    (CASE 
        WHEN Securities.Quantity < 0 THEN
        100 + (100 - LocalPriceAmount)
        ELSE
        LocalPriceAmount
     END
        ) /100) Mark
FROM
    Fireball_Reporting..StateStreet_DailyPosition_Second StateStreet 
INNER JOIN
    Fireball_Reporting..SecurityIdentifier_All ON StateStreet.CUSIP = SecurityIdentifier_All.Identifier
INNER JOIN
    Fireball..TradeBySecurityType Securities ON
        Securities.PricingSecurityID = SecurityIdentifier_All.SecurityId AND Securities.Position = 1 AND
(CASE WHEN StateStreet.SecurityName LIKE '% R V %' THEN StateStreet.SharesParValue * -1 ELSE StateStreet.SharesParValue END) = Securities.Quantity
WHERE
    CONVERT(DATETIME, StateStreet.PeriodEndDate) = '2012-10-23' --@PositionDate
GROUP BY
    PeriodEndDate,
    SecurityIdentifier_All.SecurityId

私は2番目の条件で変更を行う必要があります

(CASE WHEN StateStreet.SecurityName LIKE '% R V %' THEN StateStreet.SharesParValue * -1 ELSE StateStreet.SharesParValue END) = Securities.Quantity

例を挙げましょう。

次の出力を与える私の選択クエリ

securityname date       securityid portfolioid type mark               quantity
------------ ---------- ---------- ----------- ---- ------------------ -------------
R V DISH     10/23/2012 4879505    5           CDS  1.0487189900000000 -5000000.0000
R V DISH      10/23/2012 4879505    5           CDS  1.0487189900000000 -2000000.0000
R F DISH    10/23/2012 4879505    5           CDS  0.9512810100000000 3000000.0000

上記では、同じセキュリティIDに対して3つのレコードが表示されます。上記の結果を使用してMERGEを実行すると、チェックする2番目の条件をチェックしない場合、1番目のレコードのみが直接取得されますQuantityが、StateStreetの場合のみをチェックします。 SecurityName LIKE'%RV%'は、上記の結果から数量が-そうでない場合は、数量IDのレコードを取得します。+

そのcaseステートメントを変更するにはどうすればよいですか?% R V%または、マークを計算したselectステートメントを直接確認しますか?技術的な助けが必要です。SQLは初めてです。

4

1 に答える 1

1

たぶん次のようなもの:

(
      (StateStreet.SecurityName LIKE '% R V %' AND Securities.Quantity < 0)
   OR (StateStreet.SecurityName NOT LIKE '% R V %' AND Securities.Quantity >= 0)
)

私は、「=」(+には0が含まれる可能性がある)がどれにあるかを推測していました。

于 2012-10-25T19:09:21.713 に答える