2017-07-04 46 views
1

我需要编写一个只返回具有第10个总销售额的商品的查询。我知道我可以用TOP获得前10项,但我希望它只显示第10项。这里是我写的查询:仅退回总价第10的商品销售

SELECT TOP 10 D_I.ID, SUM(F_S.Sale) AS TOTALSALE 
FROM Dim_ItemsD_I JOIN FCT_Sales F_S ON D_I.ID = F_S.ID 
GROUP BY D_I.ID 

请帮忙!谢谢

回答

1

您需要使用子查询。顺序降序排列的前10项,然后选择第一项:

select top 1 ITEM, TOTALSALE 
from 
    (select top 10 D_I.ITEM, SUM(F_S.Sale) as TOTALSALE 
    from Dim_Items D_I 
    join FCT_Sales F_S on D_I.ID = F_S.Item_ID 
    group by D_I.Item 
    order by TOTALSALE DESC) T 

检查这里的一个简单的例子:http://rextester.com/live/SAOQ22288

+0

谢谢!这就是我一直在寻找的! – Rahi

+0

它完美的@TienNguyen,看我的小例子http://rextester.com/JIXUN12802 – TriV

+0

我不知道为什么我得到一个投票。无论如何,我添加了一个示例链接。 – TheEsnSiavashi

1

你可以使用ROW_NUMBER这里:

SELECT t.ID, t.TOTALSALE 
FROM 
(
    SELECT 
     D_I.ID, 
     SUM(F_S.Sale) AS TOTALSALE, 
     ROW_NUMBER() OVER (ORDER BY SUM(F_S.Sale) DESC) rn 
    FROM Dim_Items D_I 
    JOIN FCT_Sales F_S 
     ON D_I.ID = F_S.ID 
    GROUP BY D_I.ID 
) t 
WHERE t.rn = 10; 
1
SELECT D_I.ID, SUM(F_S.Sale) AS TOTALSALE  
FROM Dim_ItemsD_I 
JOIN FCT_Sales F_S 
ON D_I.ID = F_S.ID 
GROUP BY D_I.ID 
Offset 9 rows fetch next 1 rows only 
Order by TotalSale 

偏移将跳过前9行,接下来1行将被选中。根据您的要求,通过asc或desc订购。