Thank You,
I have used first time "Outer Apply" Clause. It seems to be it is very expensive than regular Join with Drive Table. It totally make sense to make a reference from out query to inner query so we dont scan all rows.
But According to Query Analyzer it seems to be it 26 % versus 74%.
---
21%
-----
SELECT T.CO, T.TR, S.rowNo, S.ST, T.PC, T.ST, T.ET, S.AATime AS S_Actual,
DRV_Seg.AATime AS derivedtbl_1_Actual
FROM Table1 AS T INNER JOIN
Table2AS S ON T.TR = S.TR AND S.CO = T.CO LEFT OUTER JOIN
(SELECT CO, TR, rowNo, AATime
FROM NADataSource.Segment
WHERE (ST = '1')
AND (LEFT(PC, 1) 'B') AND (PC 'lhe')
AND (PC 'lhy')) AS DRV_Seg ON
S.TR = DRV_Seg.TR AND DRV_Seg.CO = S.CO AND DRV_Seg.rowNo = S.rowNo
WHERE (T.CO = N'338') AND (T.TR = '9935')
ORDER BY S.rowNo
----------
----61%
-----------
SELECT T.CO, T.TR, S.rowNo, S.ST, T.PC, T.ST, T.ET, S.AATime AS S_Actual,
DRV_Seg.AATime AS derivedtbl_1_Actual
FROM Table1 AS T INNER JOIN
Table2AS S ON T.TR = S.TR AND S.CO = T.CO
OUTER APPLY
(SELECT CO, TR, rowNo, AATime
FROM Table2S1
WHERE S.TR = S1.TR
AND S.CO = S1.CO
AND S1.rowNo = S.rowNo
AND (ST = '1')
AND (LEFT(PC, 1) 'B')
AND (PC 'lhe')
AND (PC 'lhy')
)AS DRV_Seg
WHERE (T.CO = N'338') AND (T.TR = '9935')
ORDER BY S.rowNo
------Cheapest one
---18%
SELECT T.CO, T.TR, S.rowNo, S.ST, T.PC, T.ST, T.ET, S.AATime AS S_Actual,
S1.AATime AS derivedtbl_1_Actual
FROM Table1AS T
INNER JOIN
Table2 AS S ON T.TR = S.TR AND S.CO = T.CO
LEFT OUTER JOIN
Table2 AS S1 ON T.TR = S1.TR AND S1.CO = T.CO
AND s1.ST = '1' and S.rowNo = S1.rowNo
WHERE (T.CO = N'338') AND (T.TR = '9935')
ORDER BY S.rowNo
Any body explain me what is better approach?