2017-07-04 6 views
1

10回目のtotalSale値を持つ商品のみを返すクエリを書く必要があります。私は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行が選択されます。あなたの要件に基づいて、昇順または降順で注文してください。

関連する問題