0

スチールオーダー

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)

残念ながらWHERE、steelorder テーブルのアイテムごとにこれに句を追加する方法がわかりません

また (C# コードで oledb を使用して鋼の注文テーブルから読み取るため) のOleDbDataReader実行の読み取りごとに試しましSelect Sum(PanelBuildtime) where ordernumber = reader["OrderNumber"]たが、非常に遅いです

4

2 に答える 2

2

注文番号でグループ化して、ビルド時間の概要を表示できます

Select OrderNumber, Sum(PanelBuildTime) from SteelOrders 
INNER JOIN FinalizedPrintedStickers 
ON 
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
GROUP BY SteelOrders.OrderNumber 
于 2012-12-14T13:52:37.003 に答える
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
于 2012-12-14T13:55:33.320 に答える