declare @CustomerID int= 1 ,@CurrentAdminID int= 8728 ,@IsPay int= 1 ,@StartTime datetime= '2024/4/5 0:00:00' ,@EndTime datetime= '2024/6/5 23:59:59' ,@Codes varchar(50)= '15457924' ,@OrderListStartTime datetime= '2024/4/4 0:00:00' ,@OrderListEndTime datetime= '2024/6/20 23:59:59' ,@OrderProfitEnd money= -0.01 ,@SaleAdminID int= 8728 ;
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY AddTime DESC) AS [PageIndex] ,* FROM (SELECT oi.ID,oi.AliExpressTrusteeType,oi.AmazonShipmentId,
oi.OrderCode,
oi.ClientOrderCode,
oi.MainOrderCode,
oi.MergeOrderCode,
oi.SalesRecordNumber,
oi.OrderSourceID,
oi.ClientUserAccount,
oi.OrderStatus,
oi.OrderState,
oi.IsFirstDeliver,
( CASE
WHEN oi.IsPriority > 0 THEN oi.IsPriority
ELSE Isnull(os.PriorityNum, 0)
END ) AS IsPriority,
oi.PackagedIDs,
oi.IsASingleInTheEnd,
oi.PayerId,
oi.Email,
oi.SellerOrderId,
oi.IsPay,
oi.CommentType,
oi.TransactionId,
oi.PaymentType,
isnull(oi.RefundPrice,0) as RefundPrice,
isnull(oi.ThrowingRate,0) as ThrowingRate,
oi.TotalPrice,
oi.ExchangeRMB,
oi.ExchangeUSD,
oi.TransportPay,
oi.OtherPayPrice,
oi.ProductTotalPrice,
oi.PromotionDiscountAmount,
oi.CouponCode,
oi.CouponMinusPrice,
oi.DiscountMinusPrice,
oi.AddPayPrice,
oi.AddOrderReasonType,
oi.ShareType,
oi.ShareCustomerID,
oi.IsAccount,
oi.AccountTime,
oi.ShareTotalPrice,
oi.SynchronousTime,
oi.IsSynchronous,
oi.IsTogeInvoice,
ISNULL(oi.Encrypted,0) as Encrypted,
oi.FirstName,
oi.LastName,
oi.Address,
oi.District,
oi.CabinetNO,
oi.City,
oi.Province,
oi.Country,
oi.PostCode,
oi.Telephone,
oi.ShippingService,
oi.DownLoadUpdateTime,
oi.PromotionType,
oi.TrackNumberTemp,
oi.TrackNumbers,
oi.UpdatePlatformTime,
oi.MarkDeliveryState,
oi.EMPSDeliveryState,
oi.LogisticsOrderNo,
oi.LogisticsOrderNo1,
oi.ShipTime,
oi.OrderDescription,
oi.ISsynchOverseas,
oi.ProductNumber,
oi.ProductVolume,
oi.ProductWeight,
oi.PayTime,
oi.AddTime,
oi.UpdateTime,
oi.LatestShipDate,
oi.ServiceAdminName,
oi.SKUNumber,
oi.ReturnStatus,
oi.LatestDeliveryDate,
oi.VipDiscount,
Isnull(oi.IsTaxFree, 0) IsTaxFree,
oi.Currency,
os.ServiceAdminName AS ServiceOSAdminName,
Isnull(oi.IsFBATransit, 0) IsFBATransit,
oi.WareHouseID,
wh.WareHouseName,
os.OrderSourceName,
os.OrderSourceType,
os.OrderSourceCountry,
os.AddTime AS OrderSourceAddTime,
CASE
WHEN os.AddTime >= DATEADD(MONTH,-3,GETDATE()) THEN '新'
ELSE '旧'
END NewOldSign,
e.Country_cn,
t.TransportName,
t.PMSTransport,
tapi.Transport_API_Class,
wh.WareHouseType,
oi.Token,
os.SaleAdminName,
os.VATNumber,
os.VATRate,
oi.SaveTrackNumbersTime,
t.TrackingNumberValidDays,
ISNULL(t.TrackNumbersIsNaturalDay,1) AS TrackNumbersIsNaturalDay,
datediff(day,getdate(),(dateadd(day,TrackingNumberValidDays,SaveTrackNumbersTime))) as TrackNumbersDiffDay,
bt.BusinessTeamName,
fbt.BusinessTeamName AS FBABusinessTeamName,
frba.UserName AS FBASaleAdminName,
mbt.BusinessTeamName AS FBMBusinessTeamName,
mrba.UserName AS FBMSaleAdminName,
t.ID AS TransportID,
e.ID AS CountryID,
oi.Oaid,
0 AS DeliveryStatus,
api.CertIDAccessKeyId,
ISNULL(cexpand.BillPdfUrl, '') BillPdfUrl,orderFin.PaymentStatus,orderFin.FundTransferStatus,profits.Profits,profits.ProfitRate,profits.OtherProfitRate, profits.OtherProfitRateTax,profits.OtherOrderFee,att1.IsAttachMail AS IsAttachMail FROM RB_OrderInfo oi WITH(nolock) LEFT JOIN RB_OrderSource os WITH(nolock)
ON oi.CustomerID = os.CustomerID AND oi.OrderSourceID = os.ID
LEFT JOIN E_Country e WITH(nolock)
ON oi.Country = e.Shorthand
LEFT JOIN RB_Transport t WITH(nolock)
ON oi.CustomerID = t.CustomerID AND oi.TransportID = t.ID
LEFT JOIN RB_Transport_API tapi WITH(nolock)
ON t.Transport_API_ID = tapi.ID AND t.CustomerID = tapi.CustomerID
LEFT JOIN RB_WareHouse wh WITH(nolock)
ON oi.CustomerID = wh.CustomerID AND oi.WareHouseID = wh.ID
LEFT JOIN RB_Admin rba WITH(nolock)
ON rba.CustomerID = os.CustomerID AND rba.ID = os.SaleAdminID
LEFT JOIN RB_BusinessTeam bt WITH(nolock)
ON bt.CustomerID = os.CustomerID AND bt.ID = rba.BusinessTeamID
LEFT JOIN RB_Admin frba WITH(nolock)
ON frba.CustomerID = os.CustomerID AND frba.ID = os.FBASaleAdminID
LEFT JOIN RB_BusinessTeam fbt WITH(nolock)
ON fbt.CustomerID = frba.CustomerID AND fbt.ID = frba.BusinessTeamID
LEFT JOIN RB_Admin mrba WITH(nolock)
ON mrba.CustomerID = os.CustomerID AND mrba.ID = os.FBMSaleAdminID
LEFT JOIN RB_BusinessTeam mbt WITH(nolock)
ON mbt.CustomerID = mrba.CustomerID AND mbt.ID = mrba.BusinessTeamID
LEFT JOIN RB_OrderSource_EbayAmazonAPI api WITH(nolock)
ON os.CustomerID = api.CustomerID AND os.ID = api.OrderSourceID
LEFT JOIN RB_OrderInfo_ClientExpand (NOLOCK) cexpand
ON oi.CustomerID = cexpand.CustomerID
AND oi.OrderCode = cexpand.OrderCode
LEFT JOIN RB_OrderInfo_FinancialExt (NOLOCK) orderFin
ON oi.CustomerID = orderFin.CustomerID
AND oi.OrderCode = orderFin.OrderCode LEFT JOIN RB_Order_Profits profits WITH(nolock)
ON oi.CustomerID = profits.CustomerID AND oi.OrderCode = profits.OrderCode INNER JOIN (SELECT distinct CustomerID,OrderSourceID from RB_OrderSource_SaleAdmin WITH(nolock) where Adminid = @CurrentAdminID and CustomerID = @CustomerID) ossa ON ossa.OrderSourceID=oi.OrderSourceID and ossa.CustomerID=oi.CustomerID outer apply (SELECT Count(1) IsAttachMail
FROM RB_OrderInfo_Attach att(nolock)
WHERE att.CustomerID = oi.CustomerID
AND att.OrderCode = oi.OrderCode) att1 WHERE oi.CustomerID = @CustomerID
AND oi.IsStockOrder = 0 AND oi.OrderStatus IN ( 3 ) AND oi.IsPay = @IsPay AND oi.AddTime >= @StartTime AND oi.AddTime <= @EndTime AND Exists ( SELECT 1 FROM RB_OrderList ol WITH(nolock) WHERE ol.CustomerID = @CustomerID AND ol.AddTime >= @OrderListStartTime AND ol.AddTime <= @OrderListEndTime AND ol.SKU IN ( SELECT item FROM CharSplitForIn(@Codes,',') ) AND ol.CustomerID = oi.CustomerID AND ol.OrderCode = oi.OrderCode) AND (CONVERT(nvarchar(255),oi.OrderDescription) = '') AND (profits.Profits -ABS(profits.OtherOrderFee)) <= @OrderProfitEnd AND ((os.SaleAdminID = @SaleAdminID AND ISNULL(os.FBASaleAdminID,0) = 0 AND ISNULL(os.FBMSaleAdminID,0) = 0 ) OR (os.FBASaleAdminID = @SaleAdminID AND wh.WareHouseType = 3 ) OR (os.FBMSaleAdminID = @SaleAdminID AND wh.WareHouseType <> 3 ) AND os.OrderSourceType = 1 ) OR (os.SaleAdminID = @SaleAdminID AND os.OrderSourceType != 1) ) AS TempTable
) AS PagerTable
WHERE PagerTable.[PageIndex] BETWEEN 1 AND 6 option(recompile,maxdop 16)
重现步骤

建议优化:
declare @CustomerID int= 1 ,@CurrentAdminID int= 8728 ,@IsPay int= 1 ,@StartTime datetime= '2024/6/1 0:00:00' ,@EndTime datetime= '2024/6/5 23:59:59' ,@Codes varchar(50)= '15457924' ,@OrderListStartTime datetime= '2024/6/1 0:00:00' ,@OrderListEndTime datetime= '2024/6/20 23:59:59' ,@OrderProfitEnd money= -0.01 ,@SaleAdminID int= 8728 ;
drop table if exists #tabInfo;
SELECT
* into #tabInfo
FROM RB_OrderInfo oi WITH(nolock)
WHERE oi.CustomerID = @CustomerID
AND oi.IsStockOrder = 0 AND oi.OrderStatus IN ( 3 ) AND oi.IsPay = @IsPay AND oi.AddTime >= @StartTime AND oi.AddTime <= @EndTime
AND Exists ( SELECT 1 FROM RB_OrderList ol WITH(nolock) WHERE ol.CustomerID = @CustomerID AND ol.AddTime >= @OrderListStartTime AND ol.AddTime <= @OrderListEndTime AND ol.SKU IN ( SELECT item FROM CharSplitForIn(@Codes,',') )
AND ol.CustomerID = oi.CustomerID AND ol.OrderCode = oi.OrderCode) AND (CONVERT(nvarchar(255),oi.OrderDescription) = '');
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY AddTime DESC) AS [PageIndex] ,* FROM (SELECT oi.ID,oi.AliExpressTrusteeType,oi.AmazonShipmentId,
oi.OrderCode,
oi.ClientOrderCode,
oi.MainOrderCode,
oi.MergeOrderCode,
oi.SalesRecordNumber,
oi.OrderSourceID,
oi.ClientUserAccount,
oi.OrderStatus,
oi.OrderState,
oi.IsFirstDeliver,
( CASE
WHEN oi.IsPriority > 0 THEN oi.IsPriority
ELSE Isnull(os.PriorityNum, 0)
END ) AS IsPriority,
oi.PackagedIDs,
oi.IsASingleInTheEnd,
oi.PayerId,
oi.Email,
oi.SellerOrderId,
oi.IsPay,
oi.CommentType,
oi.TransactionId,
oi.PaymentType,
isnull(oi.RefundPrice,0) as RefundPrice,
isnull(oi.ThrowingRate,0) as ThrowingRate,
oi.TotalPrice,
oi.ExchangeRMB,
oi.ExchangeUSD,
oi.TransportPay,
oi.OtherPayPrice,
oi.ProductTotalPrice,
oi.PromotionDiscountAmount,
oi.CouponCode,
oi.CouponMinusPrice,
oi.DiscountMinusPrice,
oi.AddPayPrice,
oi.AddOrderReasonType,
oi.ShareType,
oi.ShareCustomerID,
oi.IsAccount,
oi.AccountTime,
oi.ShareTotalPrice,
oi.SynchronousTime,
oi.IsSynchronous,
oi.IsTogeInvoice,
ISNULL(oi.Encrypted,0) as Encrypted,
oi.FirstName,
oi.LastName,
oi.Address,
oi.District,
oi.CabinetNO,
oi.City,
oi.Province,
oi.Country,
oi.PostCode,
oi.Telephone,
oi.ShippingService,
oi.DownLoadUpdateTime,
oi.PromotionType,
oi.TrackNumberTemp,
oi.TrackNumbers,
oi.UpdatePlatformTime,
oi.MarkDeliveryState,
oi.EMPSDeliveryState,
oi.LogisticsOrderNo,
oi.LogisticsOrderNo1,
oi.ShipTime,
oi.OrderDescription,
oi.ISsynchOverseas,
oi.ProductNumber,
oi.ProductVolume,
oi.ProductWeight,
oi.PayTime,
oi.AddTime,
oi.UpdateTime,
oi.LatestShipDate,
oi.ServiceAdminName,
oi.SKUNumber,
oi.ReturnStatus,
oi.LatestDeliveryDate,
oi.VipDiscount,
Isnull(oi.IsTaxFree, 0) IsTaxFree,
oi.Currency,
os.ServiceAdminName AS ServiceOSAdminName,
Isnull(oi.IsFBATransit, 0) IsFBATransit,
oi.WareHouseID,
wh.WareHouseName,
os.OrderSourceName,
os.OrderSourceType,
os.OrderSourceCountry,
os.AddTime AS OrderSourceAddTime,
CASE
WHEN os.AddTime >= DATEADD(MONTH,-3,GETDATE()) THEN '新'
ELSE '旧'
END NewOldSign,
e.Country_cn,
t.TransportName,
t.PMSTransport,
tapi.Transport_API_Class,
wh.WareHouseType,
oi.Token,
os.SaleAdminName,
os.VATNumber,
os.VATRate,
oi.SaveTrackNumbersTime,
t.TrackingNumberValidDays,
ISNULL(t.TrackNumbersIsNaturalDay,1) AS TrackNumbersIsNaturalDay,
datediff(day,getdate(),(dateadd(day,TrackingNumberValidDays,SaveTrackNumbersTime))) as TrackNumbersDiffDay,
bt.BusinessTeamName,
fbt.BusinessTeamName AS FBABusinessTeamName,
frba.UserName AS FBASaleAdminName,
mbt.BusinessTeamName AS FBMBusinessTeamName,
mrba.UserName AS FBMSaleAdminName,
t.ID AS TransportID,
e.ID AS CountryID,
oi.Oaid,
0 AS DeliveryStatus,
api.CertIDAccessKeyId,
ISNULL(cexpand.BillPdfUrl, '') BillPdfUrl,orderFin.PaymentStatus,orderFin.FundTransferStatus,profits.Profits,profits.ProfitRate,profits.OtherProfitRate, profits.OtherProfitRateTax,profits.OtherOrderFee,att1.IsAttachMail AS IsAttachMail
FROM #tabInfo oi
LEFT JOIN RB_OrderSource os WITH(nolock)
ON oi.CustomerID = os.CustomerID AND oi.OrderSourceID = os.ID
LEFT JOIN E_Country e WITH(nolock)
ON oi.Country = e.Shorthand
LEFT JOIN RB_Transport t WITH(nolock)
ON oi.CustomerID = t.CustomerID AND oi.TransportID = t.ID
LEFT JOIN RB_Transport_API tapi WITH(nolock)
ON t.Transport_API_ID = tapi.ID AND t.CustomerID = tapi.CustomerID
LEFT JOIN RB_WareHouse wh WITH(nolock)
ON oi.CustomerID = wh.CustomerID AND oi.WareHouseID = wh.ID
LEFT JOIN RB_Admin rba WITH(nolock)
ON rba.CustomerID = os.CustomerID AND rba.ID = os.SaleAdminID
LEFT JOIN RB_BusinessTeam bt WITH(nolock)
ON bt.CustomerID = os.CustomerID AND bt.ID = rba.BusinessTeamID
LEFT JOIN RB_Admin frba WITH(nolock)
ON frba.CustomerID = os.CustomerID AND frba.ID = os.FBASaleAdminID
LEFT JOIN RB_BusinessTeam fbt WITH(nolock)
ON fbt.CustomerID = frba.CustomerID AND fbt.ID = frba.BusinessTeamID
LEFT JOIN RB_Admin mrba WITH(nolock)
ON mrba.CustomerID = os.CustomerID AND mrba.ID = os.FBMSaleAdminID
LEFT JOIN RB_BusinessTeam mbt WITH(nolock)
ON mbt.CustomerID = mrba.CustomerID AND mbt.ID = mrba.BusinessTeamID
LEFT JOIN RB_OrderSource_EbayAmazonAPI api WITH(nolock)
ON os.CustomerID = api.CustomerID AND os.ID = api.OrderSourceID
LEFT JOIN RB_OrderInfo_ClientExpand (NOLOCK) cexpand
ON oi.CustomerID = cexpand.CustomerID
AND oi.OrderCode = cexpand.OrderCode
LEFT JOIN RB_OrderInfo_FinancialExt (NOLOCK) orderFin
ON oi.CustomerID = orderFin.CustomerID
AND oi.OrderCode = orderFin.OrderCode LEFT JOIN RB_Order_Profits profits WITH(nolock)
ON oi.CustomerID = profits.CustomerID AND oi.OrderCode = profits.OrderCode INNER JOIN (SELECT distinct CustomerID,OrderSourceID from RB_OrderSource_SaleAdmin WITH(nolock) where Adminid = @CurrentAdminID and CustomerID = @CustomerID) ossa ON ossa.OrderSourceID=oi.OrderSourceID and ossa.CustomerID=oi.CustomerID outer apply (SELECT Count(1) IsAttachMail
FROM RB_OrderInfo_Attach att(nolock)
WHERE att.CustomerID = oi.CustomerID
AND att.OrderCode = oi.OrderCode) att1
WHERE
(profits.Profits -ABS(profits.OtherOrderFee)) <= @OrderProfitEnd AND ((os.SaleAdminID = @SaleAdminID AND ISNULL(os.FBASaleAdminID,0) = 0 AND ISNULL(os.FBMSaleAdminID,0) = 0 ) OR (os.FBASaleAdminID = @SaleAdminID AND wh.WareHouseType = 3 ) OR (os.FBMSaleAdminID = @SaleAdminID AND wh.WareHouseType <> 3 ) AND os.OrderSourceType = 1 ) OR (os.SaleAdminID = @SaleAdminID AND os.OrderSourceType != 1) ) AS TempTable
) AS PagerTable
WHERE PagerTable.[PageIndex] BETWEEN 1 AND 6 option(recompile,maxdop 16)