我在下面的查询中写道,我需要知道我在做什么错。添加row_number()
后,输出始终是此错误:
ORA-00979:不是GROUP BY表达式
00979. 00000-“不是GROUP BY表达式”
*原因:
*动作:
错误在行:22列:32
SQL Developer工具提示建议将row_number()
与Is_Data_Picked
分组在一起。但是据我所知,row_number()
是一种对每一行进行计数的解析函数,不能在GROUP BY
子句中使用
当我在row_number()
中使用GROUP BY
时,它显示以下错误
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
答案 0 :(得分:2)
这是您的子查询的相关部分:
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