在过去的几天中,此查询一直让我忙碌。我试图用不同的想法重写它,但我仍然有同样的问题。为了简化问题,我将查询的一部分放入视图中,该视图返回了23条记录。使用左连接我想添加来自表tblDatPositionsCalc的字段到这23条记录。正如你所看到的,我对tblDatPositionsCalc有一个额外的条件,以便只考虑最近的记录。有了这个条件,它会返回21条记录。连接应该在colAccount和colId的两个字段上。SQL Server LEFT JOIN
我只是希望查询从视图中返回23条记录,并尽可能从tblDatPositionsCalc获取信息。实际上,在tblDatPositionsCalc中没有相应的id和account的情况下,视图中只有2条记录,这意味着在23条记录中,只有2条记录会在来自表tblDatPositionsCalc的字段中缺少值。
我的查询的问题是它只返回来自tblDatPositionsCalc的21条记录。我不明白为什么。我试图在加入条件之后立即移动条件,但这并没有帮助。
SELECT TOP (100) PERCENT
dbo.vwCurrPos.Account,
dbo.vwCurrPos.Id,
dbo.vwCurrPos.TickerBB,
dbo.vwCurrPos.colEquityCode,
dbo.vwCurrPos.colType,
dbo.vwCurrPos.colCcy,
dbo.vwCurrPos.colRegion,
dbo.vwCurrPos.colExchange,
dbo.vwCurrPos.[Instr Type],
dbo.vwCurrPos.colMinLastDay,
dbo.vwCurrPos.colTimeShift,
dbo.vwCurrPos.Strike,
dbo.vwCurrPos.colMultiplier,
dbo.vwCurrPos.colBetaVol,
dbo.vwCurrPos.colBetaEq,
dbo.vwCurrPos.colBetaFloor,
dbo.vwCurrPos.colBetaCurv,
dbo.vwCurrPos.colUndlVol,
dbo.vwCurrPos.colUndlEq,
dbo.vwCurrPos.colUndlFut,
tblDatPositionsCalc_1.colLots,
dbo.vwCurrPos.[Open Positions],
dbo.vwCurrPos.colListMatShift,
dbo.vwCurrPos.colStartTime,
tblDatPositionsCalc_1.colPrice,
tblDatPositionsCalc_1.colMktPrice,
dbo.vwCurrPos.colProduct,
dbo.vwCurrPos.colCalendar,
CAST(dbo.vwCurrPos.colExpiry AS DATETIME) AS colExpiry,
dbo.vwCurrPos.colEndTime,
CAST(tblDatPositionsCalc_1.colDate AS datetime) AS colDate,
dbo.vwCurrPos.colFund,
dbo.vwCurrPos.colExchangeTT,
dbo.vwCurrPos.colUserTag
FROM dbo.vwCurrPos
LEFT OUTER JOIN dbo.tblDatPositionsCalc AS tblDatPositionsCalc_1
ON tblDatPositionsCalc_1.colId = dbo.vwCurrPos.Id
AND tblDatPositionsCalc_1.colAccount = dbo.vwCurrPos.Account
WHERE (tblDatPositionsCalc_1.colDate =
(SELECT MAX(colDate) AS Expr1 FROM dbo.tblDatPositionsCalc))
ORDER BY
dbo.vwCurrPos.Account,
dbo.vwCurrPos.Id,
dbo.vwCurrPos.colEquityCode,
dbo.vwCurrPos.colRegion
任何想法可能导致问题的原因是什么?
嗯,首先你说'我有一个额外的条件在tblDatPositionsCalc为了只考虑最近的记录,然后你说'它只返回21条记录'是不是你的where-clause过滤出你想要的?我理解正确吗?然后将where条件移动到您的'LEFT OUTER JOIN'的附加'AND'中可以消除您的问题。 – DrCopyPaste 2014-10-02 10:02:44