これは私の現在の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は初めてです。