WITH t AS
(
SELECT ROW_NUMBER() OVER(PARTITION BY f.Id ORDER BY f.Id) AS num,
f.Id,f.Serialid,f.AirWays,f.FlyOffDate,f.TicketType,
f.PassengerNames, f.RemoteBuyMerchantId,f.PassengerPNRs,
p.FlightNO,p.CabinCode,p.BigCode,s.FSOCreateDate,s.FSOAirLineDes,p.DisRate
FROM fffxxx1 AS s WITH(NOLOCK)
INNER JOIN fffxxx2 AS f WITH(NOLOCK) ON f.Id=s.FSOOrderId
INNER JOIN fffxxx3 AS p WITH(NOLOCK) ON p.OrderId=s.FSOOrderId
WHERE s.FSOCreateDate>='2013-11-11'
AND f.OrderFlag='S' AND f.IsTHClear=1
AND s.FSOIsAuto=0
AND ISNULL(FSOTicketingType,0) = 2
AND PassengerType=1
AND s.FSOFlyOffDate>='1991-08-08' AND s.FSOFlyOffDate<='2013-08-08'
)
SELECT t.Id,t.Serialid,t.AirWays,t.FlyOffDate,t.TicketType,
t.PassengerNames, t.RemoteBuyMerchantId,t.PassengerPNRs,
t.FlightNO,t.CabinCode,t.BigCode,ISNULL(w.ACQQNum,'') AS ACQQNum ,t.FSOCreateDate,t.FSOAirLineDes,t.DisRate
FROM t WITH(NOLOCK)
LEFT JOIN Air_WaysCode AS w WITH(NOLOCK) ON w.AirWaysCode=t.AirWays
WHERE t.num=1 AND IsClosed='0' AND CountryCode='CN' ORDER BY FSOCreateDate DESC
没有缺少开头,with t as是一个临时表的用法,
也就是把as后面括号内的查询结果放在临时表中,
这样你后面就可以用这个临时表t了,
然后也可以关连其他表(如Air_WaysCode )进行查询
可是为什么放到数据库中的时候这段语句是错的呢?(无法绑定由多个部分组成的标示符)
@戴尼玛:检查一下 IsClosed、CountryCode、FSOCreateDate 这些列中是不是两个表中都有,如果两个表都有要加上表的别名。
@junjieok: 非常感谢,弄完了,虽然还是一知半解的不过功能倒是实现了,就等后期测试效果了!
我是凡人.
你的问题?
还是要谢谢
--定义一个名称为T_AirWaysCode_Page的cte(用于分页) with T_AirWaysCode_Page as ( --主体查询语句 ) select * from T_AirWaysCode_Page --查询T_AirWaysCode_Page内所有数据
看你多表查询 应该是做分页的 使用cte名称怎么也起有点意义的 多表查询用视图方便一些
非常感谢
针对with的写法,一般在with之前加上;
非常感谢