[步骤]
(@p1 bigint,@p2 datetimeoffset(7),@p3 datetimeoffset(7),@p4 datetimeoffset(7),@p5 datetimeoffset(7),@p6 bigint)SELECT TOP 2000 *
FROM (SELECT a.ID AS PID,
a.AddTime AS DataAddTime,
a.CustomerID,
a.PostedDate,
a.FinancesReportID,
Isnull(a.AmazonOrderId, '') AS AmazonOrderID,
Isnull(a.SellerOrderId, '') AS SellerOrderID,
Isnull(c.OrderSourceCountry, '') AS OrderSourceCountryEn,
Isnull(ec.ID, 0) AS OrderSourceCountryID,
Isnull(c.SaleAdminID, 0) AS SaleAdminID,
Isnull(cy.ID, 0) AS CurrencyCode,
Isnull(ra.DepartmentID, 0) AS DepartmentID,
Cast(Isnull(a.SellerSKU, '') AS NVARCHAR(500)) AS SellerSKU,
Isnull(pss.SKU, '') AS SKU,
Isnull(p.ClientSKU, '') AS ClientSKU,
Isnull(p.ProductNameCN, '') AS ProductNameCN,
Isnull(pra.DevelopAdminID, 0) AS DevelopAdminID,
Isnull(p.ClassID, 0) AS ClassID,
Isnull(a.FinancialEventType, '') AS FinancialEventType,
Isnull(a.ShipmentItemType, '') AS ShipmentItemType,
Isnull(a.EventItemType, '') AS EventItemType,
Isnull(a.EventDetailType, '') AS EventDetailType,
a.CurrencyAmount,
Isnull(a.PointsGrantedCurrencyAmount, 0) AS PointsGrantedCurrencyAmount,
Isnull(a.PointsReturnedCurrencyAmount, 0) AS PointsReturnedCurrencyAmount,
Isnull(a.MarketplaceName, '') AS MarketplaceName,
Isnull(a.QuantityShipped, 0) AS QuantityShipped,
a.OrderSourceID,
Isnull(a.OrderItemId, '') AS OrderItemID,
Isnull(a.OrderAdjustmentItemId, '') AS OrderAdjustmentItemID,
c.OrderSourceType,
Row_number() OVER (ORDER BY a.ID ASC) AS RowNumber
FROM RB_Amazon_ListFinancialEvents (NOLOCK) a
LEFT JOIN RB_OrderSource (NOLOCK) c
ON a.CustomerID = c.CustomerID
AND a.OrderSourceID = c.ID
LEFT JOIN (SELECT OrderSourceSKU,
CustomerID,
OrderSourceID,
Max(SKU)SKU
FROM RB_Product_OrderSourceSKU WITH(nolock)
GROUP BY OrderSourceSKU,
CustomerID,
OrderSourceID)pss
ON a.CustomerID = pss.CustomerID
AND a.SellerSKU = pss.OrderSourceSKU
AND a.OrderSourceID = pss.OrderSourceID
LEFT JOIN dbo.RB_Admin ra WITH (NOLOCK)
ON c.SaleAdminID = ra.ID
LEFT JOIN dbo.RB_Product p WITH (NOLOCK)
ON p.SKU = pss.SKU
AND p.CustomerID = pss.CustomerID
LEFT JOIN dbo.RB_Product_Admin pra WITH (NOLOCK)
ON p.SKU = pra.SKU
AND p.CustomerID = pra.CustomerID
LEFT JOIN dbo.E_Country ec WITH(NOLOCK)
ON c.OrderSourceCountry = ec.Shorthand
LEFT JOIN dbo.E_Currency cy WITH(nolock)
ON a.CurrencyCode = cy.Currency
WHERE a.CustomerID = @p1
AND a.PostedDate >= @p2
AND a.PostedDate < @p3
AND a.AddTime >= @p4
AND a.AddTime < @p5
AND a.OrderSourceID = @p6) TAB
WHERE RowNumber > 0
ORDER BY RowNumber
CustomerID,
OrderSourceID,
Max(SKU)SKU
FROM RB_Product_OrderSourceSKU WITH(nolock)
GROUP BY OrderSourceSKU,
CustomerID,
OrderSourceID
全表分组统计消耗性能大 而且 转化出来的 Max(SKU) 类型也不一致 ON p.SKU = pss.SKU
[结果]
[期望]
查分成多语句 ,优先获取主表的内容,然后再在获取其他表的数据,减少逻辑复杂度。 top 2000 维度也过大

