SteelOrders
OrderNumber
-----------
0000843989
0000843124
0000881234
0000123456
-----------
FinalizedPrintedStickers
SN | PanelBuildTime
-------------------------------------
0000843989-8R8-4-0 | 360
0000843989-8R8-4-1 | 200
0000843989-8R8-4-2 | 900
0000843989-8R8-4-3 | 360
0000843989-8R8-4-4 | 460
0000843989-8S-1-0 | 220
0000843989-8-2-0 | 360
etc..
-------------------------------------
所需的结果将是:
OrderNumber | PanelBuildTime
-----------------------------
0000843989 | 2860
etc..
-----------------------------
我尝试了什么?
Select OrderNumber, Sum(PanelBuildTime) from SteelOrders
INNER JOIN FinalizedPrintedStickers
ON
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
不幸的是我不知道如何在steelorder表中为每个项添加WHERE
子句
另外(因为我在我的C#代码中使用oledb来读取钢铁订单表)我已经尝试了OleDbDataReader
执行Select Sum(PanelBuildtime) where ordernumber = reader["OrderNumber"]
的每次读取,但这非常慢< / p>
答案 0 :(得分:2)
您可以按订单编号分组,以显示构建时间的摘要
Select OrderNumber, Sum(PanelBuildTime) from SteelOrders
INNER JOIN FinalizedPrintedStickers
ON
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
GROUP BY SteelOrders.OrderNumber
答案 1 :(得分:1)
因为您经常可能想要使用不同条件的不同列,所以您还应该了解case
语句:
Select OrderNumber, Sum(case when SteelOrders.item = '0000843989' then PanelBuildTime end)
from SteelOrders INNER JOIN
FinalizedPrintedStickers
ON SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
在Access中(抱歉,我错过了标记),您必须使用IIF
而不是case
。
哦,根据您上面的评论,您需要一个group by
:
Select OrderNumber, Sum(PanelBuildTime)
from SteelOrders INNER JOIN
FinalizedPrintedStickers
ON SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
group by OrderNumber