有没有一种方法可以使用WITH子句或其他更好的CTE重新编写此SQL查询?
正如您在下面所看到的,在另一个SQL查询的内部有一个SQL查询。我有没有办法给这些查询一个别名,并在继续的查询中调用该别名,而不是完全重写它?我试图使用WITH子句来完成这项工作,但最终出现了无数错误,我似乎无法避免。任何不必重新编写查询就可以减少这种情况的方法都是我想要的。顺便说一下,我正在使用MicrosoftSQLServer2005有没有一种方法可以使用WITH子句或其他更好的CTE重新编写此SQL查询?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,正如您在下面所看到的,在另一个SQL查询的内部有一个SQL查询。我有没有办法给这些查询一个别名,并在继续的查询中调用该别名,而不是完全重写它?我试图使用WITH子句来完成这项工作,但最终出现了无数错误,我似乎无法避免。任何不必重新编写查询就可以减少这种情况的方法都是我想要的。顺便说一下,我正在使用MicrosoftSQLServer2005 select MNumber, CDate, (select MAX(CDate) from tbl_MeterCalib MC2 WHERE MC
select
MNumber,
CDate,
(select MAX(CDate)
from tbl_MeterCalib MC2
WHERE MC2.MNumber= MC1.MNumber
AND CDate< MC1.CDate) as PrevCalDate,
datediff(d,(select MAX(CDate)
from tbl_MeterCalib MC2
WHERE MC2.MNumber= MC1.MNumber
AND CDate< MC1.CDate),CDate)/2 as AdjPeriod,
dateadd(d, -datediff(d,(select MAX(CDate)
from tbl_MeterCalib MC2
WHERE MC2.MNumber= MC1.MNumber
AND CDate< MC1.CDate),CDate)/2,CDate) as DaysBackTo
from tbl_MeterCalib MC1
任何帮助都将不胜感激!谢谢大家! 您将无法使用CTE,因为重复选择依赖于与当前行相关的过滤器 但是,可以对派生表使用交叉应用来消除重复:
select
MNumber,
CDate,
x.MaxCDate as PrevCalDate,
datediff(d,x.MaxCDate,CDate)/2 as AdjPeriod,
dateadd(d, -datediff(d,x.MaxCDate,CDate)/2,CDate) as DaysBackTo
from tbl_MeterCalib MC1
CROSS APPLY
(
select MAX(CDate) AS MaxCDate
from tbl_MeterCalib MC2
WHERE MC2.MNumber= MC1.MNumber
AND CDate< MC1.CDate
) x;