2012-12-14 74 views
2

求和声明我有2和表1被称为SteelOrders另一种是所谓FinalizedPrintedStickersWHERE子句中使用GROUP BY

,我刚刚问this问题。

尽管我得到了一个答案,但我在这个问题中忽略了一些引起我这个问题的巨大细节。

我现在有这个疑问:

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

我需要得到PanelBuildTime的总和从FinalizedPrintedStickers,但只有在“状态”字段中FinalizedPrintedStickers表=“打印”

如何我是否在Sum语句中添加where子句?

任何帮助,将不胜感激^ _^

编辑:如果没有状态=在FinalizedPrintedStickers表“印刷”我需要“OrderBuildTime”为0 ....我不知道知道这是否实际上可能使用Access或不,希望它是..

回答

3

,我想你想在你的选择列表中的IIf()表达:

Sum(IIF([Status] = 'Printed', PanelBuildTime, 0)) 
+0

非常感谢你,先生。 –

0

这是你所需要的?

刚刚读了你的scema细节,sry的其他问题。如何:

Select OrderNumber, 
     Sum(case when PanelBuildTime is null then 0 else PanelBuildTime end) AS OrderBuildTime 
    from SteelOrders 
    left outer JOIN (select * from FinalizedPrintedStickers 
     where Status = 'Printed') f ON 
    SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10) 
    GROUP BY OrderNumber 

Select OrderNumber, 
    Sum(statusPrintedCount) AS OrderBuildTime 
from SteelOrders 
inner JOIN (select *, 
case when Status = 'Printed' then 1 else 0 end as statusPrintedCount 
    from FinalizedPrintedStickers) f ON 
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10) 
GROUP BY OrderNumber 

SRY,错过了访问标记。这是针对SQL Server的。

+0

没有,因为我需要的所有行主表(SteelOrders),这只会给我行打印状态,我需要它,所以如果没有订单打印的状态,它显示orderbuildtime为0.对不清楚的问题,我不能' t想想如何在Access SQL中不支持case =/ –

+2

'case ... when'。 – HansUp

0

你可以尝试这样的事:

Select Distinct a.*, b.PanelBuildTime 
From SteelOrders a, 
(Select OrderNumber, Sum(PanelBuildTime) AS OrderBuildTime from SteelOrders 
INNER JOIN FinalizedPrintedStickers 
ON 
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10) 
GROUP BY OrderNumber) b 
Where a.OrderNumber = b.OrderNumber 

编辑:刚才编辑您的初始后,它改变的东西。你已经得到了你的答案那么它的确定我猜;)根据您的回复贝丝