Sql 删除冗余数据
这是我的两张桌子 1附件详细信息Sql 删除冗余数据,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,这是我的两张桌子 1附件详细信息 SAL_NO NOT NULL NUMBER EMP_NO NOT NULL VARCHAR2(10) PAY_MONTH NOT NULL DATE RECORD_DATE NOT NULL DATE
SAL_NO NOT NULL NUMBER
EMP_NO NOT NULL VARCHAR2(10)
PAY_MONTH NOT NULL DATE
RECORD_DATE NOT NULL DATE
CURRENT_BSAL NOT NULL NUMBER(10,2)
SAL_INCREMENT NOT NULL NUMBER(10,2)
FINAL_BSAL NOT NULL NUMBER(10,2)
DESCRIPTION VARCHAR2(1000)
2付款详情
PAY_NO NOT NULL NUMBER
EMP_NO NOT NULL VARCHAR2(10)
EMP_ERN_DDCT_NO NOT NULL VARCHAR2(20)
ERN_DDCT_CATNO NOT NULL VARCHAR2(10)
ERN_DDCT_CATNAME NOT NULL VARCHAR2(1000)
PAY_MONTH NOT NULL DATE
AMOUNT NOT NULL NUMBER(10,2)
EARN_DEDUCT NOT NULL CHAR(1)
这是我的oracle查询
select s.FINAL_BSAL,
s.EMP_No,
p.ERN_DDCT_CATNO,
p.AMOUNT
from salary_details s,
pay_details p
where s.emp_no=p.emp_no
and s.SAL_NO IN (SELECT MAX(SAL_NO)
FROM SALARY_DETAILS
group by EMP_NO)
结果如下:在总共41行中,显示的行很少
在这里,我需要为Final_BSal和EMP_NO删除复制的数据。
我可以按EMP\u NO或FINAL\u BSAL分组吗?如果是这样,怎么做?尝试下面的查询
选择s.EMP\U编号,
s、 最后,,
listagg p.ERN_DDCT_CATNO,,“在p.ERN_DDCT_CATNOERN_DDCT_CATNO的集团订单内,
按p.AMOUNTAMOUNT列出集团订单中的“p.AMOUNTAMOUNT”
从薪资明细s,薪资明细p
其中s.emp\u no=p.emp\u no
和s.SAL_NO,按EMP_NO从薪资详细信息组中选择MAXSAL_NO
按EMP编号分组,最终
order by s.EMP_No您需要一个相关的子查询,而不是一个带有GROUP by的子查询。此外,还要学习使用正确的显式连接语法。简单规则:不要在FROM子句中使用逗号: 编写查询的一种更简单的方法是使用row_number或rank,但以上只是对方法的简单修改 在这里,我需要删除Final_BSal和EMP_NO的复制数据 没有重复的数据。结果集中的每一行都是不同的。简单地说,您在PAY\u DETAILS中有多行,而SALARY\u DETAILS中的每一行都有多行。因此,有两种选择: 这是期望的结果,在这种情况下,工作完成了。 这不是期望的结果。如果是这样,您需要一个额外的业务规则,即PAY_DETAILS上的过滤器,以确定返回哪一行。 例如,添加到WHERE条款后,只会返回上个月的PAY_详细信息记录:
and p.PAY_MONTH = trunc(add_months(sysdate, -1), 'MM')
假设每月工资为每月的第一个月
只有您或您的用户无法确定哪种解释是正确的,以及您可能需要应用哪些其他业务规则 显示所需的输出。第1-7行应合并为一行。您希望ern_ddct_catno和amount中的值会发生什么变化?当然,应该合并第1-8行。我可以在合并的行下显示ern_ddct_catno和amount吗?我不知道这是否可能,错误是什么?请再试一次。检查提供的字段信息是否正确,因为在您的结构中看不到任何名为FINAL\u BSAL和sal\u no的字段。您需要编辑输出,并且输出与查询输出不匹配。因为表中没有FINAL\u BSAL列,但在输出中显示。@Jain。。请原谅我的这种疯狂。。更新我的表格首先,您使用同一表格中的EMP_NO和FINAL_BSAL两列,即工资详细信息,因此您不需要加入。选择s.EMP_NO,s.FINAL_BSAL from salary_details,其中SAL_NO在中选择MAXSAL_NO from salary_details group by EMP_NO group by s.EMP_NO,s.FINAL_BSAL order by s.EMP_Nob,但我需要显示相关的Ern_DDCT_CATNO和金额。这是我在上面更新的查询---选择s.FINAL\u BSAL、s.EMP\u No、p.ERN\u DDCT\u CATNO、p.AMOUNT from salary\u details s、pay\u details p,其中s.EMP\u No=p.EMP\u No和s.SAL\u No在EMP\u NOVery有用的实践中从salary\u details组中选择MAXSAL\u No。谢谢。但是您的查询仍然提供与我相同的输出。是否有任何方法可以显示Final_Sal和Emp_noone time以及其他相应的时间?
and p.PAY_MONTH = trunc(add_months(sysdate, -1), 'MM')