【问题标题】:Row_number() and group by together not workingRow_number() 和 group by 一起不起作用
【发布时间】:2018-08-10 11:14:44
【问题描述】:

我写了下面的查询,我需要知道我做错了什么。添加row_number()后,输出一直是这个错误:

ORA-00979:不是 GROUP BY 表达式
00979. 00000 - “不是 GROUP BY 表达式”
*原因:
*行动:
行错误:22 列:32

SQL Developer 工具提示建议将row_number()Is_Data_Picked 一起添加到group by 中。但据我所知row_number() 是一个计算每一行的分析函数,它不能在GROUP BY 子句中使用

当我在GROUP BY 中使用row_number() 时,会显示以下错误

ORA-30484:缺少此函数的窗口规范
30484. 00000 - “此函数缺少窗口规范”
*原因:所有的窗口函数都应该跟窗口规范,比如() OVER()
*行动:
行错误:26 列:26

我想在查询中同时使用“GROUP BY”和“ROW_NUMBER()”。

请帮助我纠正此问题并建议我解决方案。

查询:

SELECT * 
FROM  
    (SELECT 
         COUNT(DISTINCT Emp_Code) totalEmployees,
         SUM(CASE WHEN pay_code = 999 THEN AMOUNT ELSE '0' END) net_salary,
         SUM(CASE WHEN pay_code = 997 THEN AMOUNT ELSE '0' END) gross_earning,
         SUM(CASE WHEN pay_code = 998 THEN AMOUNT ELSE '0' END) gross_deduction,
         Is_Data_Picked,
         ROW_NUMBER() OVER (ORDER BY (Emp_Code)) AS ROW_NUM
     FROM 
         Xxmpcd_Salary_Detail_Table
     WHERE 
         Prayas_Erp_Org_Id LIKE '302-%'
         AND Yyyymm = '201805'
     GROUP BY 
         Is_Data_Picked, ROW_NUMBER()) mytbl
WHERE
    ROW_NUM < 600 AND ROW_NUM > 0

【问题讨论】:

    标签: sql oracle oracle-sqldeveloper


    【解决方案1】:

    这是您的子查询的相关部分:

    SELECT . . . 
           ROW_NUMBER() OVER (ORDER BY (Emp_Code)) AS ROW_NUM
    FROM Xxmpcd_Salary_Detail_Table
    WHERE Prayas_Erp_Org_Id LIKE '302-%' AND Yyyymm = '201805'
    GROUP BY Is_Data_Picked, ROW_NUMBER()
    

    您在第一个ROW_NUMBER() 中有错误,因为Emp_Code 不在GROUP BY 中。第二个有错误,因为ROW_NUMBER() 不是函数。

    我可以推测你的意图:

    SELECT . . . 
           ROW_NUMBER() OVER (ORDER BY Emp_Code) AS ROW_NUM
    FROM Xxmpcd_Salary_Detail_Table
    WHERE Prayas_Erp_Org_Id LIKE '302-%' AND Yyyymm = '201805'
    GROUP BY Is_Data_Picked, Emp_Code
    

    如果您不想按Emp_Code 聚合,那么您可能打算:

    SELECT . . . 
           ROW_NUMBER() OVER (ORDER BY MIN(Emp_Code)) AS ROW_NUM
    FROM Xxmpcd_Salary_Detail_Table
    WHERE Prayas_Erp_Org_Id LIKE '302-%' AND Yyyymm = '201805'
    GROUP BY Is_Data_Picked
    

    【讨论】:

    • 天哪,我需要将 Emp_code 也包含在 group by 子句中,非常感谢,我现在会处理这个
    猜你喜欢
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2012-04-13
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2017-12-23
    相关资源
    最近更新 更多