访问 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'
我正在尝试编写一个 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'