WHERE (( m.ldStartCurr BETWEEN NET.Start_date AND NET.End_date) ; OR ( m.ldEndCurr BETWEEN NET.Start_date AND NET.End_date) ; OR ( NET.Start_date < m.ldStartCurr AND NET.End_date > m.ldEndCurr) ; OR ( NET.Start_date => m.ldStartCurr AND NET.End_date <= m.ldEndCurr) ; OR ( m.ldStartPrev BETWEEN NET.Start_date AND NET.End_date) ; OR ( m.ldEndPrev BETWEEN NET.Start_date AND NET.End_date) ; OR ( NET.Start_date < m.ldStartPrev AND NET.End_date > m.ldEndPrev)) ; OR ( NET.Start_date => m.ldStartPrev AND NET.End_date <= m.ldEndPrev) ; AND NET.Operator == lnOpCode; ** That will gives you all records that have WHERE (( m.ldStartCurr BETWEEN NET.Start_date AND NET.End_date) ; OR ( m.ldEndCurr BETWEEN NET.Start_date AND NET.End_date) ; OR ( NET.Start_date < m.ldStartCurr AND NET.End_date > m.ldEndCurr) ; OR ( NET.Start_date => m.ldStartCurr AND NET.End_date <= m.ldEndCurr) ; OR ( m.ldStartPrev BETWEEN NET.Start_date AND NET.End_date) ; OR ( m.ldEndPrev BETWEEN NET.Start_date AND NET.End_date) ; OR ( NET.Start_date < m.ldStartPrev AND NET.End_date > m.ldEndPrev)) ; OR ( NET.Start_date => m.ldStartPrev AND NET.End_date <= m.ldEndPrev) ; AND NET.Operator == lnOpCode;:-))
WHERE (( m.ldStartCurr BETWEEN NET.Start_date AND NET.End_date) ; OR ( m.ldEndCurr BETWEEN NET.Start_date AND NET.End_date) ; OR ( NET.Start_date < m.ldStartCurr AND NET.End_date > m.ldEndCurr) ; OR ( NET.Start_date => m.ldStartCurr AND NET.End_date <= m.ldEndCurr) ; OR ( m.ldStartPrev BETWEEN NET.Start_date AND NET.End_date) ; OR ( m.ldEndPrev BETWEEN NET.Start_date AND NET.End_date) ; OR ( NET.Start_date < m.ldStartPrev AND NET.End_date > m.ldEndPrev) ; OR ( NET.Start_date => m.ldStartPrev AND NET.End_date <= m.ldEndPrev)) ; && Closing bracket here AND NET.Operator == lnOpCode;>The ETMDATA SQL gets just the selected operator OK. It's this code following later, that selects the non-ETM data (from table NOTETM) that gets the spurious operator data. Now some operators can have records in both tables so I do need to check both. Can you see where this goes wrong? I've made the same change:
>SELECT NET.Operator, NET.Route, NET.Start_Date, NET.End_Date, NET.RorF, NET.Passengers, ; > IIF( NET.Route == NET.Mcl_Rte, " ", NET.Mcl_Rte) as ContrNum, ; > 0000000 AS CurrPass, 0000000 AS PrevPass, op.Desc as OpDesc, RF1.ServType ; > FROM NotETM NET ; > JOIN Operator op ; > On NET.Operator == op.Code ; > JOIN RF1 ; > On NET.Operator == RF1.Operator ; > and NET.Route == RF1.ERoute ; > WHERE (( m.ldStartCurr BETWEEN NET.Start_date AND NET.End_date) ; > OR ( m.ldEndCurr BETWEEN NET.Start_date AND NET.End_date) ; > OR ( NET.Start_date < m.ldStartCurr AND NET.End_date > m.ldEndCurr) ; > OR ( NET.Start_date => m.ldStartCurr AND NET.End_date <= m.ldEndCurr) ; > OR ( m.ldStartPrev BETWEEN NET.Start_date AND NET.End_date) ; > OR ( m.ldEndPrev BETWEEN NET.Start_date AND NET.End_date) ; > OR ( NET.Start_date < m.ldStartPrev AND NET.End_date > m.ldEndPrev)) ; > OR ( NET.Start_date => m.ldStartPrev AND NET.End_date <= m.ldEndPrev) ; > AND NET.Operator == lnOpCode; > ORDER BY NET.Operator, NET.Route ; >INTO CURSOR csrNotETMPassengers NOFILTER READWRITE >