C# join语句中列的一部分之和

C# join语句中列的一部分之和,c#,sql,ms-access,C#,Sql,Ms Access,钢铁订单 OrderNumber ----------- 0000843989 0000843124 0000881234 0000123456 ----------- SN | PanelBuildTime ------------------------------------- 0000843989-8R8-4-0 | 360 0000843989-8R8-4-1 | 200 0000843989-8R8-4-2

钢铁订单

OrderNumber
-----------
0000843989    
0000843124    
0000881234    
0000123456    
-----------
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
-----------
0000843989    
0000843124    
0000881234    
0000123456    
-----------
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),其中ordernumber=reader[“ordernumber”]
,但是速度非常慢

您可以按订单号分组以显示构建时间的摘要

Select OrderNumber, Sum(PanelBuildTime) from SteelOrders 
INNER JOIN FinalizedPrintedStickers 
ON 
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
GROUP BY SteelOrders.OrderNumber 

您可以按订单号分组,以显示生成时间的摘要

Select OrderNumber, Sum(PanelBuildTime) from SteelOrders 
INNER JOIN FinalizedPrintedStickers 
ON 
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
GROUP BY SteelOrders.OrderNumber 

因为您可能经常希望使用不同的条件来创建不同的列,所以您还应该了解
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

哦,根据你上面的评论,你需要一个
分组:

Select OrderNumber, Sum(PanelBuildTime)
from SteelOrders INNER JOIN
    FinalizedPrintedStickers 
    ON SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
group by OrderNumber

因为您可能经常希望使用不同的条件来创建不同的列,所以您还应该了解
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

哦,根据你上面的评论,你需要一个
分组:

Select OrderNumber, Sum(PanelBuildTime)
from SteelOrders INNER JOIN
    FinalizedPrintedStickers 
    ON SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
group by OrderNumber

啊,你已经包括了一个字符串文字,有数千个订单,它们都需要构建时间的总和,这个总和是一个,所以你需要一个组,显示每个订单号的构建时间的总和。我已经改变了我的答案。啊,你已经包括了一个字符串文字,有数千个订单,它们都需要构建时间的总和,这个总和是一个,所以你需要一个组,到那时显示每个订单号的构建时间的总和。我已更改了答案。您不能将case语句与Access一起使用。您不能将case语句与Access一起使用。