0

次の 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 を持つ他のレコードも異なる価格で提供されるため、発生しています。

しかし、私はそのレコードを望んでいません

これらのレコードを削除するにはどうすればよいですか?

4

2 に答える 2

3

1 回につき 1 つのエントリを取得します。DailyLoanAndCashPosition.PurchaseLotId = NAVImpact.PurchaseLotId

これは、同じ PurchaseLotId でより多くのエントリが必要であることを意味します

于 2012-12-11T17:31:26.640 に答える
1

最も可能性の高い原因は、左結合が重複した PurchaseLotId を生成することです。内部結合の左側で select distinct(PurchaseLotId) を実行するかどうかを知る最良の方法。

于 2012-12-11T17:41:37.530 に答える