0

我正在尝试根据工作中心总结运行时间。例如,如果工作中心为 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]

感谢所有的帮助

4

2 回答 2

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

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

于 2013-10-29T12:08:55.800 回答
0

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

像这样:

    SELECT
        WorkCenter
        ,TotalRunTime = SUM([Run Time Hours])
    FROM [table]
    GROUP BY
        WorkCenter
WHERE
Workcenter NOT IN ('1','2','3','4')
于 2013-10-28T13:24:04.060 回答