如何使用SQL总结基于Work Center的运行时间

时间:2013-10-28 13:11:02

标签: sql-server-2008

我试图总结基于工作中心的运行时间。例如,如果工作中心为108,则总结这些工作中心的运行时间:572,257,107,102和108.但如果工作中心108不存在,则不要总结。

以下是工作中心108的示例:

Work Center     Run Time Hours
572            0.025
257            1
107            4.284
102           19.046
108            4.865

所以朗姆酒的总时间应该是:29.22

但如果没有工作中心108,我甚至不想总计其他工作中心572,257 107和102的总运行时间。

Work Center     Run Time Hours
572               0.025
257               1
107               4.284
102              19.046

我累了:

SUM(
  CASE 
    WHEN routingoperations.workcentreid IN ('108', '107','102','105','255','257','572')
        THEN (dbo.routingoperations.runtime) 
  END) AS [Total Runtime Hours]

感谢所有帮助

2 个答案:

答案 0 :(得分:0)

为什么不使用GROUP BY子句?如果工作中心108不在您的数据集中,它将不会出现在聚合中。 如果要过滤掉一些记录,请将它们放在WHERE子句中。

就像这样:

    SELECT
        WorkCenter
        ,TotalRunTime = SUM([Run Time Hours])
    FROM [table]
    GROUP BY
        WorkCenter
WHERE
Workcenter NOT IN ('1','2','3','4')

答案 1 :(得分:0)

根据您的上次评论: 如果这是一个静态的情况,那么你需要首先检查工作中心= 108的任何记录,然后做一笔总和。您可以使用IF EXISTS语句执行此操作。 像这样:

IF EXISTS (SELECT 1 FROM WorkCenter WHERE WorkCenter = '108')
BEGIN
    SELECT      
        TotalRunTime = SUM(RunTimeHours)
    FROM WorkCenter
    WHERE
        WorkCenter in ('572','257','107','102','108')   
END
ELSE
    SELECT TotalRunTime = 0

如果您有基于工作中心的各种不同情况,则此逻辑不是最佳解决方案。