【发布时间】:2012-12-11 17:26:31
【问题描述】:
我有以下 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 价格不同。
但我不想要那些记录
我怎样才能消除这些记录?
【问题讨论】:
-
你有重复的行吗?
-
虽然您在
DailyLoanAndCashPosition中使用了DISTINCT,但NAVImpact中的PurchaseLotId的20 个值必须出现在DailyLoanAndCashPosition的70 个不同行中,但其他列的差异会导致70 行仍然是独一无二的。 -
它显示相同purchaselotid的重复记录,但我们正在进行内部连接,那为什么它会重复记录?什么是解决方案?请帮忙
-
内连接不消除重复,只记录没有匹配值的地方。如果要消除重复,请使用
SELECT DISTINCT -
@DigitalD 谢谢,但我已经使用了 DISTINCT 然后它也给了我重复 :(
标签: sql sql-server sql-server-2008