C# 如何基于行的总和计算值以获得值

C# 如何基于行的总和计算值以获得值,c#,sql,C#,Sql,我有一个C#应用程序,用于从SQL数据库导出数据。它从视图中提取数据并将其导出到Excel,以便导入我们的工资系统。我需要计算加班费。我有以下代码,但它不计算加班费。我在互联网上搜索了一个解决方案,但没有任何运气 SELECT [Co Code] , [Empl No] , [Task CD] , [Day No] , [Fund Co Code] , [Job No] , [Equip Cost Cde] , SUM([Reg Hrs

我有一个C#应用程序,用于从SQL数据库导出数据。它从视图中提取数据并将其导出到Excel,以便导入我们的工资系统。我需要计算加班费。我有以下代码,但它不计算加班费。我在互联网上搜索了一个解决方案,但没有任何运气

SELECT  [Co Code]
    , [Empl No]
    , [Task CD]
    , [Day No]
    , [Fund Co Code]
    , [Job No]
    , [Equip Cost Cde]
    , SUM([Reg Hrs Jc]) AS [Reg Hrs Jc]
    ,(CASE WHEN [Reg Hrs Jc] > 40 THEN [Reg Hrs Jc] - 40 ELSE 0 END) AS [Ot Hrs Jc]
FROM         dbo.MIS_FTTIMECARD_OT
WHERE     ([Date Worked] BETWEEN '8/11/2013' AND '8/17/2013')
GROUP BY [Co Code]
    , [Empl No]
    , [Task CD]
    , [Day No]
    , [Fund Co Code]
    , [Job No]
    , [Equip Cost Cde]
    , (CASE WHEN [Reg Hrs Jc] > 40 THEN [Reg Hrs Jc] - 40 ELSE 0 END)

您应该使用一个子查询,该子查询允许您首先汇总工作时间:

SELECT t.*, (CASE WHEN [Reg Hrs Jc] > 40 THEN [Reg Hrs Jc] - 40 ELSE 0 END) AS [Ot Hrs Jc]
FROM 
   (SELECT [Co Code], [Empl No], [Task CD], [Day No], [Fund Co Code], [Job No], [Equip Cost Cde], SUM([Reg Hrs Jc]) AS [Reg Hrs Jc] FROM dbo.MIS_FTTIMECARD_OT
   WHERE ([Date Worked] BETWEEN '8/11/2013' AND '8/17/2013')
   GROUP BY [Co Code], [Empl No], [Task CD], [Day No], [Fund Co Code], [Job No], [Equip Cost Cde]) AS t

为了扩展其他人的答案,您的命名约定可能是导致混淆的原因

考虑以下代码片段:

, SUM([Reg Hrs Jc]) AS [Reg Hrs Jc]
,(CASE WHEN [Reg Hrs Jc] > 40 THEN [Reg Hrs Jc] - 40 ELSE 0 END) AS [Ot Hrs Jc]
通过重命名,可以清楚地看到发生了什么:

, SUM([Reg Hrs Jc]) AS [Reg Hrs Jc Sum]
,(CASE WHEN [Reg Hrs Jc] > 40 THEN [Reg Hrs Jc] - 40 ELSE 0 END) AS [Ot Hrs Jc]
我认为您已经有效地尝试了以下操作,如果它没有共享实际的列名,这将不起作用

, SUM([Reg Hrs Jc]) AS [Reg Hrs Jc Sum]
,(CASE WHEN [Reg Hrs Jc Sum] > 40 THEN [Reg Hrs Jc Sum] - 40 ELSE 0 END) AS [Ot Hrs Jc]

你不能在同一个范围内给一个列起昵称,然后用新标题引用它,所以你应该像其他人建议的那样,将Ot Hrs Jc建立在SUM([Reg Hrs Jc])的基础上

你没有提供足够的信息。更多地解释您的数据,是否每个员工每周或每天都有一行。您是否试图获取每位员工的总工时?等等。只需列出表定义并给出一些好的示例数据。此外,如果列名中没有空格,就不需要到处都是恼人的大括号。看来您的加班标准是基于字段Reg Hrs Jc的值,而不是值的总和。同样,这种类型的东西,作为字段名的sum(fieldname)往往会引起问题。我建议使用不同的别名。这非常有效。非常感谢。我曾尝试使用子查询,但我想它的格式不正确。再次感谢。