我有一个查询,我需要获取汇总信息(不同字段的总和)来准备报告。查询如下所示。
SELECT a.pipe_sys,
d.type_desc,
e.rt,
COUNT(a.weld_no) totaljoints,
SUM(a.w_c) welded,
SUM(CASE WHEN c.is_qualifying_weld = 1 THEN 1 ELSE 0 END) qualifyingwelds,
SUM(CASE WHEN a.has_penalties = 1 THEN 1 ELSE 0 END) penalties,
SUM(CASE WHEN b.r_c = 1 AND c.is_qualifying_weld = 0 AND a.has_penalties = 0 THEN 1 ELSE 0 END) tested,
SUM(CASE WHEN a.rt_res = 'ACC' THEN 1 ELSE 0 END) accepted
FROM xl_weld_master a,
imac_ndt b,
welder_list c
WHERE a.spool_no = c.spool_no
AND a.cs_no = c.cs_no
AND a.weld_no = c.weld_no
AND a.spool_no = b.spool_no
AND a.cs_no = b.cs_no
AND a.weld_no = b.weld_no
GROUP BY a.pipe_sys,
d.type_desc,
e.rt;
表a和b具有1-1关系,这意味着1个焊缝具有一个NDT(测试)信息。表a和c具有1-n关系,这意味着焊接可由多个焊工焊接(通常为3-4焊工)。
现在,当我运行上述查询时,因为表A-C具有1-n关系,因此每个焊接返回重复记录,这使得聚合不正确。
例如,1焊接由3个焊工焊接,因此我将焊接计数为3而不是1和所有其他焊接相同。我怎么能纠正这个?
P.S:这是一个非常古老的VB6应用程序,代码写得非常糟糕,所以请原谅。