连接语句中列的一部分的总和

时间:2012-12-14 13:48:44

标签: c# sql ms-access

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>

2 个答案:

答案 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