Для того, чтобы код был немного более лаконичным, перекрестное применение может быть полезно для такого рода вещей. Вы перекрестно применяете выражение или несколько выражений, на которые затем можете ссылаться по имени, без необходимости повторять весь список столбцов, изменять псевдонимы и т. Д. Особенно, если у вас несколько уровней вложенности. Это сложно описать словами, вот пример:
select v.a,
v.b,
v.c,
v.d,
v.a_plus_b,
v.a_times_b,
v.a_plus_b_squared
from (
select u.a,
u.b,
u.c,
u.d,
u.a_times_b,
u.a_plus_b,
a_plus_b_squared = u.a_plus_b * u.a_plus_b
from (
select t.a,
t.b,
t.c,
t.d,
a_times_b = t.a * t.b,
a_plus_b = t.a + t.b
from t
) u
) v
where v.a_plus_b_squared > 100
order by v.a_times_b
Это невероятно многословно по сравнению с этим:
select t.a,
t.b,
t.c,
t.d,
u.a_plus_b,
u.a_times_b,
v.a_plus_b_squared
from t
cross apply (select t.a * t.b, t.a + t.b) u (a_times_b, a_plus_b)
cross apply (select u.a_plus_b * u.a_plus_b) v (a_plus_b_squared)
where v.a_plus_b_squared > 100
order by u.a_times_b