2016-10-22 80 views
0

我正在處理SQL Server 2012中的查詢,但我被卡住了。基本上我需要從按國家和產品名稱排序的一組行中獲得排名前1的銷售行。 3列由3個不同的表:SQL Server如何從一組行中獲得最高銷售排

SELECT  
    c.Country, p.ProductName AS [Product Name], 
    SUM(o.TotalPrice) AS [Sales Revenue] 
FROM  
    Orders o 
JOIN  
    Customers c ON o.CustomerID = c.CustomerID 
JOIN  
    Products p ON o.ProductID = p.ProductID 
GROUP BY 
    c.Country, p.ProductName 
ORDER BY 
    c.Country, SUM(o.TotalPrice) DESC 

我得到以下結果:

Customers, Product, Orders 

運行此查詢後

Country  Product Name  Sales Revenue 
--------------------------------------------- 
Argentina Marmalade   2620.00 
Argentina Queso Cabrales 630.00  
Austria  Spegesild   432.00  
Belgium  Courdavault  4950.00 
Belgium  Ipoh Coffee  2557.60 
Belgium  Flotemysost  1505.00 
Belgium  Alice Mutton  1248.00 

我需要的結果顯示完全一樣以上表格格式:

Country  Product Name  Sales Revenue 
--------------------------------------------- 
Argentina Marmalade   2620.00 
Austria  Spegesild   432.00  
Belgium  Courdavault  4950.00 

試圖在sum()上使用max,但它沒有工作。也嘗試了TOP 1,但無法弄清楚。請幫忙。謝謝!

回答

3

您可以使用公用表表達式(CTE)按國家和按SUM(o.TotalPrice)降序對數據進行分區。

WITH records 
AS 
(
    SELECT c.Country, 
     p.ProductName  AS [Product Name], 
     SUM(o.TotalPrice) AS [Sales Revenue], 
     ROW_NUMBER() OVER (PARTITION BY c.Country 
           ORDER BY SUM(o.TotalPrice) DESC) RN   
    FROM Orders o 
    JOIN Customers c ON o.CustomerID = c.CustomerID 
    JOIN Products p ON o.ProductID = p.ProductID 
GROUP BY c.Country, p.ProductName 
) 
SELECT Country, 
     [Product Name], 
     [Sales Revenue] 
    FROM records 
WHERE RN = 1 
+0

嗨ddrjca,這一個作品完美!謝謝 – Sunshine