我试图找出目标中缺失的记录。我需要缺少记录的员工。
假设我输入源为
1,Jack,type1,add1,reg3,..,..,..,
2,Jack,type2,add1,reg3,..,,.,..,
3,Jack,type3,add2,reg4,..,.,..,.,
4,Rock,,,,,,,,
我的输出为
1,Jack,type1,add1,reg3,..,..,..,
4,Rock,,,,,,,,
我有其他员工的1000行数,目标中我没有任何重复记录。 我需要出现在源和目标中的员工有不同的发生 例如,在上面的样本数据中,我有3个杰克条目和1个岩石源条目
并且在目标中我只有杰克和一个摇滚的进入
我在查询下运行,所需的输出是Jack,3
我怎样才能得到它。我在下面的查询中收到错误
select A.EMP_NUMBER,A.CNT1
from
(select EMP_NUMBER,count(EMP_NUMBER) as CNT1
from EMPLOYEE_SOURCE
group by EMP_NUMBER ) as A
INNER JOIN
(select B.EMP_NUMBER,B.CNT2
from (select EMP_NUMBER,count(EMP_NUMBER) as CNT2
from EMPLOYEE_TARGET
group by EMP_NUMBER )as B )
ON (A.EMP_NUMBER = B.EMP_NUMBER)
where A.CNT1 != B.CNT2
请帮忙。
答案 0 :(得分:0)
为什么在按名称分组时,不要让两个表中具有不同行数的员工(我想Emp_Number是包含名称的字段,如果问题中的查询返回的话)
SELECT s.Emp_Number, Count(s.Emp_Number)
FROM EMPLOYEE_SOURCE s
LEFT JOIN EMPLOYEE_TARGET t ON s.Emp_Number = t.Emp_Number
GROUP BY s.Emp_Number
HAVING Count(s.Emp_Number) != Count(t.Emp_Number)
答案 1 :(得分:0)
如果您指定了确切的错误,那将非常有用。
如果这是您的实际查询,则有两件事:第二个派生表没有别名(顺便说一下,根本不需要它),至少在Teradata中!=
无效,这个是SQL而不是C.
select A.EMP_NUMBER,A.CNT1
from
(
select EMP_NUMBER,count(EMP_NUMBER) as CNT1
from EMPLOYEE_SOURCE
group by EMP_NUMBER
) as A
INNER JOIN
(
select EMP_NUMBER,count(EMP_NUMBER) as CNT2
from EMPLOYEE_TARGET
group by EMP_NUMBER
) as B
ON (A.EMP_NUMBER = B.EMP_NUMBER)
where A.CNT1 <> B.CNT2
如果第二个表中缺少员工,则可能必须使用外部联接作为Serpiton建议并添加额外的WHERE条件: 其中A.CNT1&lt; CNT1&gt; B.CNT2 或b.CNT2 IS NULL