次の SQL クエリがありますが、左の結合で明確な結果が得られません。トレースを手伝ってください。
SELECT DISTINCT
Position.Date,
Position.SecurityId,
Position.PurchaseLotId,
Position.InPosition,
ISNULL(ClosingPrice.Bid, Position.Mark) AS Mark
FROM
Fireball_Reporting.dbo.Reporting_DailyNAV_Pricing POSITION WITH (NOLOCK, READUNCOMMITTED)
LEFT JOIN Fireball.dbo.AdditionalSecurityPrice ClosingPrice WITH (NOLOCK, READUNCOMMITTED) ON
ClosingPrice.SecurityID = Position.PricingSecurityID AND
ClosingPrice.Date = Position.Date AND
ClosingPrice.SecurityPriceSourceID = @SourceID AND
ClosingPrice.PortfolioID IN (5,6)
WHERE
DatePurchased > @NewPositionDate AND
Position.Date = @CurrentPositionDate AND
InPosition = 1 AND
Position.PortfolioId IN (
SELECT
PARAM
FROM
Fireball_Reporting.dbo.ParseMultiValuedParameter(@PortfolioId, ',')
) AND
(
Position > 1 OR
Position < - 1
)
ここで、LEFT JOINISNULL(ClosingPrice.Bid, Position.Mark) AS Mark
と LEFT JOIN を使用すると、たとえば . (5,6)
私がポートフォリオID = 5を入れた場合、結果は次のようになります120 records
私がポートフォリオID = 6を入れた場合、結果は次のようになります20 records
私がポートフォリオID = (5,6)を置くと、それは私に与えるはずですが、どちらが間違っているか140 records
という結果を与えています。350 records
:(
LEFT JOIN を使用すると、 Fireball.dbo.AdditionalSecurityPrice ClosingPrice
列を持たないテーブルとして PurchaseLotID の条件がないPurchaseLotID
ため、同じ purchaseLotID を持つ他のレコードも異なる価格で提供されるため、発生しています。
しかし、私はそのレコードを望んでいません
これらのレコードを削除するにはどうすればよいですか?