2017-06-07 125 views
0

ランクの行番号を取得しようとしています。以下はクエリですウィンドウ関数は、別のウィンドウ関数または集計のコンテキストで使用することはできません.SQLサーバーエラー

SELECT * 
FROM (
    SELECT DISTINCT TOP 100 PERCENT rank() OVER (
       PARTITION BY o.panel_id 
       ,o.combo_type_code ORDER BY row_number() OVER (
         ORDER BY o.panel_id 
         ) 
       ) AS rank 
      ,panel_code 
     FROM tbk_offer_head o 
      ,tbk_combo_type ct 
      ,tbk_panel p 
     WHERE o.panel_id = p.panel_id 
      AND o.combo_type_code = ct.combo_type_code 
      AND o.panel_id IN (
       SELECT p.panel_id 
       FROM tbk_panel p 
       WHERE p.campaign_id = 7392 
       ) 
     ) A 
    WHERE A.rank = 1 
    ORDER BY panel_code 

エラーを受け取ると、ウィンドウ関数は別のコンテキストで使用することはできません。どうすればこの問題を解決できますか?

+0

なぜ 'row_number()'が必要ですか?あなたは同じ結果を得るために 'o.panel_id'によって順序付けすることができます。 – HoneyBadger

答えて

1

あなたが本当にやろうとしていることはわかりません。しかし、あなたは間違いなく適切な明示的な使用を学ぶべきですJOIN構文。

しかし、関数をネストする必要はありません。あなたのロジックはと同等でなければなりません:

row_number() over (partition by o.panel_id, o.combo_type_code 
        order by o.panel_id 
       ) as rank 

なぜこの使用row_number()の代わりrank()?元のorder byは、重複したことのないrow_number()を使用しています。したがって、rank()がそれを使用できる場合、値はすべて別個であり、rank()row_number()と等しくなります - panel_idが複製されていても。

関連する問題