您的位置:首页 > 其它

多表关联导致数据重复的问题

2016-10-12 11:10 926 查看
做综合月报时,需要多张接口表关联取数据,关联时,中间有一个接口表的数据有重复,会导致整个数据块有问题。
在做综合月报时,因为规整库人口数据中有8个区划不在t_dim_area表中。导致left join 时,会有部分数据丢失,所以采取了默认将那8个区划默认为该区划下的存在的区划排序后第一条。
('340225271029','340225271032','340225271028','340225271031','340225271030','340225271034','340225271033','340225271035')

将这8个区划默认为
CASE WHEN AREACODE NOT IN
('340225271029','340225271032','340225271028','340225271031','340225271030','340225271034','340225271033','340225271035') THEN AREACODE
ELSE (
SELECT areacode
FROM (
SELECT AREACODE
FROM T_FACT_ZHYB_PEOHOUSE_MON
WHERE areacode LIKE '340225100%'
ORDER BY areacode
)
WHERE ROWNUM = 1
)
END AreaCode

处理后的sql:
返回结果显示有9个区划是一样的,因为将8个区划默认了。所以会有9个一样的区划。



SELECT areacode,COUNT(1) FROM (
SELECT
CASE WHEN AREACODE NOT IN
('340225271029','340225271032','340225271028','340225271031','340225271030','340225271034','340225271033','340225271035') THEN AREACODE
ELSE (
SELECT areacode
FROM (
SELECT AREACODE
FROM T_FACT_ZHYB_PEOHOUSE_MON
WHERE areacode LIKE '340225100%'
ORDER BY areacode
)
WHERE ROWNUM = 1
)
END AreaCode
,SUM(RKZS) RKZS
,SUM(LSYXWLHL_FZ) LSYXWLHL_FZ
,SUM(LSYXWLHL_FM)LSYXWLHL_FM
,SUM(JTHWLZFBL_FZ) JTHWLZFBL_FZ
,SUM(JTHWLZFBL_FM) JTHWLZFBL_FM
,SUM(LSRKLRL_FZ) LSRKLRL_FZ
,SUM(LSRKLRL_FM) LSRKLRL_FM
,SUM(YSRKLRL_FZ) YSRKLRL_FZ
,SUM(YSRKLRL_FM) YSRKLRL_FM
FROM T_FACT_ZHYB_PEOHOUSE_MON
WHERE MONTH ='201609'
GROUP BY areacode
) GROUP BY areacode
HAVING COUNT(1)>1

此时,在与t_dim_area关联时,数据还是正常的。但是因为后面还有关联表,会导致其他的表中区划为340225100001的数据重复计算8次。从而导致数据重复。所以在多张表关联时,一定要确保关联的几张表中关联字段不会出现重复。

此时有三张表,test,test01,test02。
可以发现在表test01中,有一条name重复的数据。

当test与test01关联时,虽然test01表中有重复的那么,但是此时是计算test01的counts合计。有重复的计算进去也是对的。

当test与test02关联时,两张表都 没有重复数据,计算tets02中的counts合计也是对的。
但是当三张变都关联时,计算test02的counts合计就会出错。

这就是因为test01表中有一条重复数据,而sql执行时是从下往上执行sql的,所以在test02余test01关联时,test02的数据中name为a1的数据counts会多计算一次。所以计算的sum(counts)会多出100,为700.而实际上应该是600.
此时解决方案是要将有重复数据的test01的重复数据合并为一条。因为name字段是关联字段,是不允许重复的。

此时test01表中就没有重复数据,而且sum(counts)值也没有变少或变多。将处理后的表作为关联表使用。

此时计算的test02的sum(counts)的值就是正确的了。
所以多表关联时,切记关联表中所需要关联的字段一定不能有重复。有重复的话要先去重,在关联。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐