2011-02-03 8 views
2

SQL Server 2008 R2では、出現回数によって決定される個々のアイテムのランクを計算しようとしています。色の上位10個のアイテムのランクを決めることはできますが、特定の色のランクを取得することはできません。SQL Serverのアイテムのランク

I.Eこれは、の列を持つVehiclesの表を持っています。

特定のColourIDについては、そのランクを決めたいと思います。

すなわち

  • ColourID 7は、10個のインスタンスを有する
  • ColourID 10
  • ColourID 2は、その結果セット内の1インスタンス

を有する5つのインスタンスを有し、ColourID 7は、ランクを有します1の場合、ColourID 10は2のランクを持ちます。

私はColourID 10を照会して、それにランク2があることを確認したいと思います。これは私が苦労していることです。

私は、派生テーブル、共通テーブル式を使用してみましたが、両方のケースで、彼らは誰もが、私は一つのアイテムのランクを照会できるか知っています1.

のランクを取り戻しますか?すべての色をランク付けする

答えて

1

;with cteCount as (
    select ColourID, count(*) as ColourCount 
     from Vehicles 
     group by ColourID 
) 
select ColourID, ColourCount, 
     row_number() over (order by ColourCount desc) as Rank 
    from cteCount 

あなたは、単一のアイテムのランクを照会するために、この技術を拡張することができます

;with cteCount as (
    select ColourID, count(*) as ColourCount 
     from Vehicles 
     group by ColourID 
), 
cteRank as (
    select ColourID, ColourCount, 
      row_number() over (order by ColourCount desc) as Rank 
     from cteCount 
) 
select ColourID, ColourCount, Rank 
    from cteRank 
    where ColourID = 10 
+0

パーフェクトは、あなたにジョーをありがとう!それは私が行方不明だったrow_number()要素でした。あなたは私を非常に幸せにしました、これは私がしばらくの間縛られていた:) – Amethi