聚合来自具有1-n关系的不同表的信息

时间:2017-08-29 11:02:00

标签: sql oracle join vb6

我有一个查询,我需要获取汇总信息(不同字段的总和)来准备报告。查询如下所示。

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应用程序,代码写得非常糟糕,所以请原谅。

0 个答案:

没有答案