访问 SQL 对重复行求和

Access SQL Sum Duplicating Rows

我正在尝试编写一个 Access SQL 查询来获取一些带有子 select 的值并对一堆数据求和,但是当我 运行 查询数据时正在重复。

这是我的查询

SELECT 
          tt.TransportType,
          rp.duns AS Duns,
          rp.part AS Part,
          rp.plant AS Plant,
          rr.Route AS Route,
          rr.RouteComp,
          tt.TransLength*tt.TransWidth*tt.TransHeight AS [Capacidade],
          len(rr.CurrentFrequency) AS [Frequencia],
          Capacidade*Frequencia AS Cap_Disp,
          s.Cap_Disp*s.FrequenciaTotal AS Cap_Total,
          s.FrequenciaTotal,
          Cap_Disp/Cap_Total AS Rateio,
   FROM ((((tblRoutesParts rp
            INNER JOIN tbl20week w ON rp.duns = w.duns 
            AND rp.part = w.prt
            AND rp.plant = w.plant)
   INNER JOIN tblRoutesRoutes rr ON rp.Route = rr.Route)
   INNER JOIN tblTransportTypes tt ON tt.TransportType = rr.TransportType)
   INNER JOIN    (SELECT tt.TransportType,          rp.duns,        rp.part,        rp.plant,
                                 sum(len(rr.CurrentFrequency)) as FrequenciaTotal,
                                 sum((tt.TransLength*tt.TransWidth*tt.TransHeight)*(len(rr.CurrentFrequency))) AS Cap_Disp
            from ( tblRoutesParts rp
                     INNER JOIN tblRoutesRoutes rr ON rp.Route = rr.Route)
                     INNER JOIN tblTransportTypes tt ON tt.TransportType = rr.TransportType
            GROUP BY tt.TransportType,
                     rp.duns,
                     rp.part,
                     rp.plant) s ON s.duns= rp.duns
   AND s.part = rp.part
   AND s.plant = rp.plant)


   WHERE left(rp.Route, 1) <> 'L'
     and   rp.duns = '903323939'
     and   rp.part   = '24584938'
     and   rp.plant = 'BE'
     and   rr.Route = 'FRW.A0001'

这是输出:

如您所见,数据仅在求和字段处重复!

谁能帮帮我?

尝试加入您的 's' ON s.TransportType = tt.TransportType。当你 inner join s 时,你可能会得到多行。

SELECT 
      tt.TransportType,
      rp.duns AS Duns,
      rp.part AS Part,
      rp.plant AS Plant,
      rr.Route AS Route,
      rr.RouteComp,
      tt.TransLength*tt.TransWidth*tt.TransHeight AS [Capacidade],
      len(rr.CurrentFrequency) AS [Frequencia],
      Capacidade*Frequencia AS Cap_Disp,
      s.Cap_Disp*s.FrequenciaTotal AS Cap_Total,
      s.FrequenciaTotal,
      Cap_Disp/Cap_Total AS Rateio,
FROM ((((tblRoutesParts rp
        INNER JOIN tbl20week w ON rp.duns = w.duns 
        AND rp.part = w.prt
INNER JOIN tblRoutesRoutes rr ON rp.Route = rr.Route)
INNER JOIN tblTransportTypes tt ON tt.TransportType = rr.TransportType)
INNER JOIN    (SELECT tt.TransportType,          rp.duns,        rp.part,        rp.plant,
                             sum(len(rr.CurrentFrequency)) as FrequenciaTotal,
                             sum((tt.TransLength*tt.TransWidth*tt.TransHeight)*(len(rr.CurrentFrequency))) AS Cap_Disp
        from ( tblRoutesParts rp
                 INNER JOIN tblRoutesRoutes rr ON rp.Route = rr.Route)
                 INNER JOIN tblTransportTypes tt ON tt.TransportType = rr.TransportType
        GROUP BY tt.TransportType,
                 rp.duns,
                 rp.part,
                 rp.plant) s ON s.duns= rp.duns
AND s.part = rp.part
AND s.plant = rp.plant
AND s.TransportType = tt.TransportType)


WHERE left(rp.Route, 1) <> 'L'
 and   rp.duns = '903323939'
 and   rp.part   = '24584938'
 and   rp.plant = 'BE'
 and   rr.Route = 'FRW.A0001'