窗口函数不能在另一个窗口函数或aggregate.SQL Server错误的上下文中使用

时间:2017-06-07 10:58:03

标签: sql sql-server

我正在尝试获取排名的行号。以下是查询

 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

获取错误,窗口函数不能在另一个上下文中使用。请帮助我如何解决这个问题。

1 个答案:

答案 0 :(得分: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