我需要編寫一個只返回具有第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