我需要编写一个只返回具有第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
请帮忙!谢谢
我需要编写一个只返回具有第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
请帮忙!谢谢
您需要使用子查询。顺序降序排列的前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
你可以使用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;
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订购。
谢谢!这就是我一直在寻找的! – Rahi
它完美的@TienNguyen,看我的小例子http://rextester.com/JIXUN12802 – TriV
我不知道为什么我得到一个投票。无论如何,我添加了一个示例链接。 – TheEsnSiavashi