34,593
社区成员
发帖
与我相关
我的任务
分享
ALTER TEST [dbo].[TEST]
@Dep datetime,
@Rtn datetime,
@DepAirPort NVARCHAR(10),
@RtnAirPort NVARCHAR(10),
@Airways NVARCHAR(100),
@TripType NVARCHAR(10),
@FareType NVARCHAR(10)
AS
SET LANGUAGE US_ENGLISH
DECLARE @IsWeekday NVARCHAR(10)
SET @IsWeekday = SUBSTRING(DATENAME(weekday,@dep),1,3)
DECLARE @RtnIsWeekday NVARCHAR(10)
SET @RtnIsWeekday = SUBSTRING(DATENAME(weekday,@Rtn),1,3)
DECLARE @NewDepAirport VARCHAR(30)
DECLARE @NewDesAirport VARCHAR(30)
DECLARE @IDepAirport NVARCHAR(200)
DECLARE @IDesAirport NVARCHAR(200)
/*
Get the same city code
*/
SELECT @NewDepAirport = Mc.ocitycode + ',' + Mc.samecitycode
FROM MST_ComCity MC WHERE Ocitycode = @DepAirPort
SELECT @NewDesAirport = Mc.ocitycode + ',' + Mc.samecitycode
FROM MST_ComCity MC WHERE Ocitycode = @RtnAirPort
/*
check if there are the same city code in the MST_ComCity TABLE.
if not, THEN set the input values
*/
IF @NewDepAirport IS NULL
SET @NewDepAirport=@DepAirport
IF @NewDesAirport IS NULL
SET @NewDesAirport=@RtnAirPort
/*
Declare a temp TABLE
*/
DECLARE @DepCityCode TABLE( cityCode NVARCHAR(10))
DECLARE @RtnCityCode TABLE( cityCode NVARCHAR(10))
/*
Dep Airport
*/
SELECT @IDepAirport='SELECT '''+replace(@NewDepAirport,',',''' UNION ALL SELECT ''')+''''
INSERT @DepCityCode EXEC(@IDepAirport)
/*
Rtn airport
*/
SELECT @IDesAirport='SELECT '''+replace(@NewDesAirport,',',''' UNION ALL SELECT ''')+''''
INSERT @RtnCityCode EXEC(@IDesAirport)
/*
Airways check
*/
DECLARE @AirCode TABLE( Code NVARCHAR(10) )
DECLARE @allAirway NVARCHAR(2000)
IF @airways <> 'ALL'
BEGIN
SELECT @allAirway='SELECT '''+replace(@airways,',',''' UNION ALL SELECT ''')+''''
INSERT @AirCode EXEC(@allAirway)
END
ELSE
INSERT @AirCode (Code) SELECT airlinecode FROM MST_Airlines
/*
Get useFul contract
*/
SELECT DISTINCT ContractInfo.contractid,FareType,OnlineOnly,TicketBy INTO #ContractInfo
FROM ContractInfo
WHERE
(
(
CASE
WHEN @FareType = 'NET' THEN 'NET'
WHEN @FareType = 'COMM' THEN 'COMM'
END = FareType
)
OR
(
CASE
WHEN @FareType = 'NETCOMM'
THEN 'ATPCO'
END <> FareType
)
)
AND ReleaseFlag = 1
AND TicketBy >= convert(nvarchar(10),getdate(),101)--DateAdd(HOUR,-23,GETDATE())
AND EXISTS
(
SELECT 1 FROM GeneralRule
WHERE
SellFROM <= CONVERT(nvarchar(10),GETDATE(),101)
AND ( DATEDIFF(dd,GETDATE(),@dep) >= AdvancePurchase )
AND ContractID = ContractInfo.ContractID
)
AND EXISTS
(
SELECT 1 FROM MST_Airlines
WHERE AirlineID = ContractInfo.AirlineID
AND EXISTS (
SELECT 1 FROM @AirCode airCode
WHERE airCode.Code = MST_Airlines.AirLineCode
)
)
/*
feeder
*/
SELECT R.* INTO #feeder FROM
(SELECT * FROM routing WHERE routingtype='FEEDER')R
INNER JOIN #ContractInfo C ON C.contractid=R.contractid
INNER JOIN @DepCityCode Dep ON PATINDEX('%'+ Dep.cityCode + '%',R.Departure) >0
/*
Interline
*/
SELECT R.* INTO #interline FROM
(SELECT * FROM routing WHERE routingtype='INTERLINE')R
INNER JOIN #ContractInfo C ON C.contractid=R.contractid
INNER JOIN @RtnCityCode Rtn ON PATINDEX('%'+ Rtn.cityCode +'%',R.Destination) >0
/*
Online
*/
SELECT R.*,C.FareType,C.OnlineOnly,C.TicketBy INTO #ONLINE FROM routing R
INNER JOIN #ContractInfo C ON C.contractid=R.contractid
WHERE R.routingtype='ONLINE'
/*
Set the all contractID 2 Temp TABLE
*/
SELECT DISTINCT contractid INTO #contractid FROM #ONLINE
/*
Online Fare
*/
SELECT O.* INTO #FARE_O FROM FARE O
INNER JOIN #contractid C ON C.contractid=O.contractid
WHERE O.AddOnFlag='0'
AND BlockFare='0'
AND (
CASE @TripType
WHEN '1' THEN RTAdult
WHEN '0' THEN OWAdult
END >0
)
/*
Feeder Fare
*/
SELECT F.* INTO #FARE_F FROM FARE F
INNER JOIN #contractid C ON C.contractid=F.contractid
WHERE F.AddOnFlag='1'
AND F.GateWayType='1'
AND BlockFare='0'
AND (
CASE @TripType
WHEN '1' THEN RTAdult
WHEN '0' THEN OWAdult
END >0
)
/*
InterLine Fare
*/
SELECT I.* INTO #FARE_I FROM FARE I
INNER JOIN #contractid C ON C.contractid=I.contractid
WHERE I.AddOnFlag='1'
AND I.GateWayType='0'
AND BlockFare='0'
AND (
CASE @TripType
WHEN '1' THEN RTAdult
WHEN '0' THEN OWAdult
END >0
)
/*
online(2 + 3)
*/
SELECT * INTO #online23 FROM #ONLINE R
WHERE R.departure IS NULL
and R.feedergateway is not null and R.InterlineGateway is not null
and R.destination is NULL
/*
Onlne(1 + 2 + 3)
*/
SELECT * INTO #online123 FROM
(
SELECT * FROM #ONLINE O
WHERE O.departure IS NOT NULL
and (O.feedergateway is not null and O.InterlineGateway is not null)
and O.destination is NULL
)R
INNER JOIN @DepCityCode Dep ON PATINDEX('%'+ Dep.cityCode + '%',R.Departure) >0
/*
Online(2 + 3 + 4)
*/
SELECT * INTO #online234 FROM
(
SELECT * FROM #ONLINE O
WHERE O.departure IS NULL
AND O.feedergateway is not null
AND O.InterlineGateway is not null
AND O.destination is NOT NULL
)R
INNER JOIN @RtnCityCode Rtn ON PATINDEX('%'+ Rtn.cityCode +'%',R.Destination) >0
/*
TravelFROM and TravelTo check TABLE
*/
SELECT SeasonName,TravelFROM,TravelTo,contractid,TicketingBy INTO #SD
FROM SeasonDetail S
INNER JOIN MST_Season MS ON s.SeasonID=MS.SeasonID
WHERE @Dep BETWEEN S.TravelFROM AND S.TravelTo
AND CONVERT(nvarchar(10),GETDATE(),101) <= S.TicketingBy
/* The 1st
12 + 23 + 34
*/
SELECT
F.departure,
F.feedergateway AS feedergateway1,
O23.feedergateway AS feedergateway2,
O23.InterlineGateway AS InterlineGateway1,
T1.InterlineGateway AS InterlineGateway2,
T1.Destination,
O23.FareType,
O23.OnlineOnly,
O23.TicketBy,
O1.FareID,
O1.FareNo, F1.FareNO AS F1No, I1.FareNO AS I1No,
O1.contractid,
O1.FareBasisGroupID,
O1.MinStayType ,
O1.MinStay,
O1.MaxStayType,
O1.MaxStay,
dbo.[GetCombineAiline](O1.airlineid,F1.airlineid,I1.airlineid) Airline,
O1.BookingClass + '/' + F1.BookingClass + '/' + I1.BookingClass AS BookingClass,
(O1.OWChild + F1.OWChild + I1.OWChild) OWChild,
(O1.RTChild + F1.RTChild + I1.RTChild) RTChild,
(O1.RTAdult + F1.RTAdult + I1.RTAdult) RTAdult,
(O1.OWAdult + F1.OWAdult + I1.OWAdult) OWAdult,
O1.SeasonInfor
,'122334' AS FN INTO #TempFARE1
FROM #feeder F
INNER JOIN AddOnRouting AOR ON F.routingid=AOR.routingid
INNER JOIN #online23 O23 ON O23.routingid =AOR.mainroutingid
INNER JOIN
(
SELECT I.*,AOR.mainroutingid FROM #interline I
INNER JOIN AddOnRouting AOR ON I.routingid=AOR.routingid
)T1
ON T1.mainroutingid = O23.routingid
INNER JOIN #FARE_F F1 ON F1.routingID=F.Routingid
INNER JOIN #FARE_I I1 ON I1.routingID =T1.Routingid
INNER JOIN #FARE_O O1 ON O23.routingID= O1.RoutingID
-- 2
-- 123 + 34
SELECT
O123.departure,
O123.feedergateway AS feedergateway1,
O123.feedergateway AS feedergateway2,
O123.InterlineGateway AS InterlineGateway1,
I34.InterlineGateway As InterlineGateway2,
I34.Destination ,
O123.FareType,
O123.OnlineOnly,
O123.TicketBy,
O1.FareID,
O1.FareNo,'' AS F1No,I1.FareNo AS I1No,
O1.contractid,
O1.FareBasisGroupID,
O1.MinStayType ,
O1.MinStay,
O1.MaxStayType,
O1.MaxStay,
dbo.[GetCombineAiline](O1.airlineid,null,I1.airlineid) Airline,
O1.BookingClass + '/-' + '/' + I1.BookingClass AS BookingClass,
(O1.OWChild + I1.OWChild) OWChild,
(O1.RTChild + I1.RTChild) RTChild,
(O1.RTAdult + I1.RTAdult) RTAdult,
(O1.OWAdult + I1.OWAdult) OWAdult,
O1.SeasonInfor
,'12334' AS FN INTO #TempFARE2
FROM #online123 O123
INNER JOIN (
SELECT mainroutingid,I.Destination,I.InterlineGateway,I.Routingid FROM #interline I
INNER JOIN AddOnRouting AOR ON I.RoutingID=AOR.routingid
)I34 ON O123.routingID=I34.mainroutingid
INNER JOIN #FARE_I I1 ON I1.routingID =I34.Routingid
INNER JOIN #FARE_O O1 ON O123.routingID= O1.RoutingID
-- 3
-- 12 + 234
SELECT
F.departure,
F.feedergateway AS feedergateway1,
O234.feedergateway AS feedergateway2,
O234.InterlineGateway AS InterlineGateway1,
O234.InterlineGateway AS InterlineGatewa2,
O234.Destination,
O234.FareType,
O234.OnlineOnly,
O234.TicketBy,
O1.FareID,
O1.FareNo,'' AS F1No,F1.FareNo AS I1No,
O1.contractid,
O1.FareBasisGroupID,
O1.MinStayType ,
O1.MinStay,
O1.MaxStayType,
O1.MaxStay,
dbo.[GetCombineAiline](O1.airlineid,F1.airlineid,NULL) Airline,
O1.BookingClass + '/' + F1.BookingClass + '/-' AS BookingClass,
(O1.OWChild + F1.OWChild) OWChild,
(O1.RTChild + F1.RTChild) RTChild,
(O1.RTAdult + F1.RTAdult) RTAdult,
(O1.OWAdult + F1.OWAdult) OWAdult,
O1.SeasonInfor
,'12234' AS FN INTO #TempFARE3
FROM #feeder F
INNER JOIN AddOnRouting AOR ON F.routingid=AOR.routingid
INNER JOIN
#online234 O234 ON O234.routingid =AOR.mainroutingid
INNER JOIN #FARE_O O1 ON O234.routingID= O1.RoutingID
INNER JOIN #FARE_F F1 ON F1.routingID =F.Routingid
/* The 4th
1 + 2 + 3 + 4
*/
SELECT
O1234.departure,
O1234.feedergateway AS feedergateway1,
O1234.feedergateway AS feedergateway2,
O1234.InterlineGateway AS InterlineGateway1,
O1234.InterlineGateway AS InterlineGatewa2,
O1234.Destination,
O1234.FareType,
O1234.OnlineOnly,
O1234.TicketBy,
O1.FareID,
O1.FareNo,'' AS F1No, '' AS I1No,
O1.contractid,
O1.FareBasisGroupID,
O1.MinStayType ,
O1.MinStay,
O1.MaxStayType,
O1.MaxStay,
dbo.[GetCombineAiline](O1.airlineid,null,NULL) Airline,
O1.BookingClass + '/-/-' AS BookingClass,
O1.OWChild,
O1.RTChild,
O1.RtAdult,
O1.OWAdult,
O1.SeasonInfor,
'1234' AS FN INTO #TempFARE4
FROM
(
SELECT * FROM #ONLINE R
WHERE R.feedergateway IS NOT NULL AND R.InterlineGateway IS NOT NULL
)O1234
INNER JOIN @DepCityCode Dep ON PATINDEX('%'+ Dep.cityCode + '%',O1234.Departure) >0
INNER JOIN @RtnCityCode Rtn ON PATINDEX('%'+ Rtn.cityCode +'%',O1234.Destination) >0
INNER JOIN #FARE_O O1 ON O1234.routingID= O1.RoutingID
-- 5
-- 1 + 2 + 3
SELECT
O123.departure,
O123.feedergateway AS feedergateway1,
O123.feedergateway AS feedergateway2,
O123.InterlineGateway AS InterlineGateway1,
O123.InterlineGateway AS InterlineGatewa2,
O123.Destination,
O123.FareType,
O123.OnlineOnly,
O123.TicketBy,
O1.FareID,
O1.FareNo,'' AS F1No, '' AS I1No,
O1.contractid,
O1.FareBasisGroupID,
O1.MinStayType ,
O1.MinStay,
O1.MaxStayType,
O1.MaxStay,
dbo.[GetCombineAiline](O1.airlineid,null,NULL) Airline,
O1.BookingClass + '/-/-' AS BookingClass,
O1.OWChild,
O1.RTChild,
O1.RTAdult,
O1.OWAdult,
O1.SeasonInfor,
'123' AS FN INTO #TempFARE5
FROM
(
SELECT * FROM #ONLINE R
WHERE R.feedergateway IS NOT NULL
AND R.destination IS NULL
)O123
INNER JOIN @DepCityCode Dep ON PATINDEX('%'+ Dep.cityCode + '%',O123.Departure) >0
INNER JOIN @RtnCityCode Rtn ON PATINDEX('%'+ Rtn.cityCode +'%',O123.InterlineGateway) >0
INNER JOIN #FARE_O O1 ON O123.routingID= O1.RoutingID
-- 6
-- 2 + 3 + 4
SELECT
'' AS departure,
O234.feedergateway AS feedergateway1,
O234.feedergateway AS feedergateway2,
O234.InterlineGateway AS InterlineGateway1,
O234.InterlineGateway AS InterlineGatewa2,
O234.Destination,
O234.FareType,
O234.OnlineOnly,
O234.TicketBy,
O1.FareID,
O1.FareNo,'' AS F1No, '' AS I1No,
O1.contractid,
O1.FareBasisGroupID,
O1.MinStayType ,
O1.MinStay,
O1.MaxStayType,
O1.MaxStay,
dbo.[GetCombineAiline](O1.airlineid,null,NULL) Airline,
O1.BookingClass+ '/-/-' AS BookingClass,
O1.OWChild,
O1.RTChild,
O1.RTAdult,
O1.OWAdult,
O1.SeasonInfor,
'234' AS FN INTO #TempFARE6
FROM
(
SELECT * FROM #ONLINE R
WHERE R.Departure IS NULL
AND R.InterlineGateway IS NOT NULL
)O234
INNER JOIN @DepCityCode Dep ON PATINDEX('%'+ Dep.cityCode + '%',O234.feedergateway) >0
INNER JOIN @RtnCityCode Rtn ON PATINDEX('%'+ Rtn.cityCode +'%',O234.destination) >0
INNER JOIN #FARE_O O1 ON O234.routingID= O1.RoutingID
-- 7
-- 2 + 3
SELECT
'' AS departure,
O23.feedergateway AS feedergateway1,
O23.feedergateway AS feedergateway2,
O23.InterlineGateway AS InterlineGateway1,
O23.InterlineGateway AS InterlineGatewa2,
'' AS Destination,
O23.FareType,
O23.OnlineOnly,
O23.TicketBy,
O1.FareID,
O1.FareNo,'' AS F1No, '' AS I1No,
O1.contractid,
O1.FareBasisGroupID,
O1.MinStayType ,
O1.MinStay,
O1.MaxStayType,
O1.MaxStay,
dbo.[GetCombineAiline](O1.airlineid,null,NULL) Airline,
O1.BookingClass + '/-/-' AS BookingClass,
O1.OWChild,
O1.RTChild,
O1.RTAdult,
O1.OWAdult,
O1.SeasonInfor,
'23' AS FN INTO #TempFARE7
FROM
(
SELECT * FROM #ONLINE R
WHERE R.Departure IS NULL AND R.destination IS NULL
)O23
INNER JOIN @DepCityCode Dep ON PATINDEX('%'+ Dep.cityCode + '%',O23.feedergateway) >0
INNER JOIN @RtnCityCode Rtn ON PATINDEX('%'+ Rtn.cityCode +'%',O23.InterlineGateway) >0
INNER JOIN #FARE_O O1 ON O23.routingID= O1.RoutingID
SELECT * INTO #TempFARE from #TempFARE1
UNION all
SELECT * from #TempFARE2
UNION all
SELECT * from #TempFARE3
UNION all
SELECT * from #TempFARE4
UNION all
SELECT * from #TempFARE5
UNION all
SELECT * from #TempFARE6
UNION all
SELECT * from #TempFARE7
SELECT
DISTINCT TF.*,
FUR.FareUsedRestrictionID,
FR.FlightRestrictionID,
FR.RestrictionNo,
dbo.[GetCombineAiline](FR.AirlineID,null,NULL) ResAirline,
FR.Class,
FR.RoutingType,
FR.DirectionRule,
FR.FlightIn,
FR.FlightOut,
FR.SpecificIn,
FR.SpecificOut,
FR.BkcCombine,
-- Surcharge Begin
CASE WHEN WC.BoundType ='out'
THEN
(
CASE WHEN
(
CASE @IsWeekday
WHEN 'Mon' THEN WCD.Mon
WHEN 'Tue' THEN WCD.Tue
WHEN 'Wed' THEN WCD.Wed
WHEN 'Thu' THEN WCD.Thu
WHEN 'Fri' THEN WCD.Fri
WHEN 'Sat' THEN WCD.Sat
WHEN 'Sun' THEN WCD.Sun
END
)='1' THEN isnull(WC.Amount,0) ELSE 0 END
)
-- IN
WHEN WC.BoundType='in'
THEN (
CASE WHEN
(
CASE @RtnIsWeekday
WHEN 'Mon' THEN WCD.Mon
WHEN 'Tue' THEN WCD.Tue
WHEN 'Wed' THEN WCD.Wed
WHEN 'Thu' THEN WCD.Thu
WHEN 'Fri' THEN WCD.Fri
WHEN 'Sat' THEN WCD.Sat
WHEN 'Sun' THEN WCD.Sun
END
)='1' THEN isnull(WC.Amount,0) ELSE 0 END
)
-- IN + OUT
WHEN WC.BoundType='both'
THEN (
CASE WHEN
(
CASE @IsWeekday
WHEN 'Mon' THEN WCD.Mon
WHEN 'Tue' THEN WCD.Tue
WHEN 'Wed' THEN WCD.Wed
WHEN 'Thu' THEN WCD.Thu
WHEN 'Fri' THEN WCD.Fri
WHEN 'Sat' THEN WCD.Sat
WHEN 'Sun' THEN WCD.Sun
END
)='1' THEN isnull(WC.Amount,0) ELSE 0 END +
CASE WHEN
(
CASE @RtnIsWeekday
WHEN 'Mon' THEN WCD.Mon
WHEN 'Tue' THEN WCD.Tue
WHEN 'Wed' THEN WCD.Wed
WHEN 'Thu' THEN WCD.Thu
WHEN 'Fri' THEN WCD.Fri
WHEN 'Sat' THEN WCD.Sat
WHEN 'Sun' THEN WCD.Sun
END
)='1' THEN isnull(WC.Amount,0) ELSE 0 END
)
END
+ GR.Surcharge AS Surcharge, WC.BoundType,
GR.SellFrom,
Note=CASE WHEN SN.Note IS NULL THEN '-' ELSE 'S' END
INTO #TotalFare
FROM #TempFARE TF
INNER JOIN FareUsedRestriction FUR ON FUR.fareId=TF.FareId
INNER JOIN FlightRestriction FR ON FR.FlightRestrictionID = FUR.FlightRestrictionID
-- Fare Used WeekCharge
INNER JOIN GeneralRule GR ON GR.contractid=TF.contractid
LEFT JOIN SpecialNotes SN ON SN.contractid=TF.contractid
LEFT JOIN FareUsedWeekCharge FUW ON TF.fareid=FUW.fareid
LEFT JOIN dbo.WeekCharge WC ON FUW.WeekChargeid=WC.WeekChargeid
LEFT JOIN dbo.WeekChargeDefine WCD ON WCD.WeekChargeid=FUW.WeekChargeid
-- Fare Used BlackDay
INNER JOIN #SD SD ON TF.contractid = SD.contractid AND PATINDEX('%'+ sD.SeasonName +'%',TF.SeasonInfor) >0
LEFT JOIN FareUsedBlackDay FUB ON TF.fareid=FUB.fareid
LEFT JOIN BlackOutDate BO ON BO.blackOutDateID=FUB.blackOutDateID
LEFT JOIN BlackOutDateDefine BODD ON BODD.blackOutDateID = BO.blackOutDateID
WHERE
PATINDEX('%'+ SD.SeasonName +'%',TF.SeasonInfor) >0
AND (
-- Check if it BETWEEN Date FROM/TO
(
BO.DateFROM IS NOT NULL
AND
@Dep Not BETWEEN BO.DateFROM AND BO.DateTo
)
or
(
@Dep BETWEEN BO.DateFROM AND BO.DateTo
AND
(
CASE @IsWeekday
WHEN 'Mon' THEN BODD.Mon
WHEN 'Tue' THEN BODD.Tue
WHEN 'Wed' THEN BODD.Wed
WHEN 'Thu' THEN BODD.Thu
WHEN 'Fri' THEN BODD.Fri
WHEN 'Sat' THEN BODD.Sat
WHEN 'Sun' THEN BODD.Sun
END = '1'
)
)
)
OR BO.DateFROM IS NULL
SELECT * FROM #TotalFare
TRUNCATE TABLE #ContractInfo
DROP TABLE #ContractInfo
TRUNCATE TABLE #contractid
DROP TABLE #contractid
TRUNCATE TABLE #feeder
DROP TABLE #feeder
TRUNCATE TABLE #interline
DROP TABLE #interline
TRUNCATE TABLE #online
DROP TABLE #online
TRUNCATE TABLE #online23
DROP TABLE #online23
TRUNCATE TABLE #online123
DROP TABLE #online123
TRUNCATE TABLE #online234
DROP TABLE #online234
TRUNCATE TABLE #SD
DROP TABLE #SD
TRUNCATE TABLE #FARE_O
DROP TABLE #FARE_O
TRUNCATE TABLE #FARE_F
DROP TABLE #FARE_F
TRUNCATE TABLE #FARE_I
DROP TABLE #FARE_I
TRUNCATE TABLE #TempFARE1
DROP TABLE #TempFARE1
TRUNCATE TABLE #TempFARE2
DROP TABLE #TempFARE2
TRUNCATE TABLE #TempFARE3
DROP TABLE #TempFARE3
TRUNCATE TABLE #TempFARE4
DROP TABLE #TempFARE4
TRUNCATE TABLE #TempFARE5
DROP TABLE #TempFARE5
TRUNCATE TABLE #TempFARE6
DROP TABLE #TempFARE6
TRUNCATE TABLE #TempFARE7
DROP TABLE #TempFARE7
TRUNCATE TABLE #TempFARE
DROP TABLE #TempFARE
TRUNCATE TABLE #TotalFare
DROP TABLE #TotalFare