我有以下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 JOIN ISNULL(ClosingPrice.Bid, Position.Mark) AS Mark
和LEFT JOIN时,它给了我更多没有多个投资组合ID的记录
例如。 (5,6)
如果我把portfolioID = 5给出结果为120 records
如果我把portfolioID = 6给出结果为20 records
当我把portfolioID =(5,6)时,它应该给我140 records
但它给出的结果为350 records
,这是错误的。 :(
这种情况正在发生,因为当我使用LEFT JOIN时,没有任何条件的PurchaseLotID因为表Fireball.dbo.AdditionalSecurityPrice ClosingPrice
没有列PurchaseLotID
所以它给了我其他记录,也就是那些拥有相同purchaseLotID且具有不同价格的人
但我不想要那些记录
如何消除这些记录?
答案 0 :(得分:3)
每DailyLoanAndCashPosition.PurchaseLotId = NAVImpact.PurchaseLotId
这意味着您必须使用相同的PurchaseLotId进行更多的委托
答案 1 :(得分:1)
最可能的原因是左连接产生重复的PurchaseLotIds。了解是否在内部联接的左侧执行select distinct(PurchaseLotId)的最佳方法。