首页 > 解决方案 > SELECT 语句查找列的 SUM

问题描述

我正在尝试创建一个查询语句来查找 TaskLength 列的总和。

我尝试了很多组合,使用逗号分隔符和语句将 SQLSUM函数放置在查询中。AND没有SUM TaskLength,查询工作正常。

这正在c# WPF应用程序中使用,但我能够在 Visual Studio、服务器资源管理器查询窗口中测试查询语句。

这是我尝试过的查询:

SELECT TaskName, TaskLength FROM myTable, SUM TaskLength 
WHERE TaskName='Maintenance' AND EventStartTime 
BETWEEN '8/17/2019' AND '8/19/2019' 

这是我的桌子:

TABLE myTable 
ID    TaskName      EventStartTime          TaskLength
318   START SHIFT   8/17/2019 11:51:00 AM   16                  
319   Maintenance   8/17/2019 12:07:00 PM   10                  
320   Part Prep     8/17/2019 12:17:00 PM   13                  
321   Production    8/17/2019 12:30:00 PM   117                 
322   Part Prep     8/17/2019 02:26:00 PM   45                  
323   Downtime      8/17/2019 02:28:00 PM   65                  
327   START SHIFT   8/17/2019 03:48:00 PM   00                  
328   Maintenance   8/17/2019 03:48:00 PM   25                  
329   Part Prep     8/17/2019 03:48:00 PM   35                  
330   Production    8/17/2019 03:48:00 PM   120                 
331   START SHIFT   8/17/2019 03:59:00 PM   10                  
332   Maintenance   8/17/2019 03:59:00 PM   90                  

我收到Incorrect Syntax Near..错误。我希望当它正确运行时,我会得到 125 的结果。

修改了整个代码块的查询:

using (SqlConnection con = new SqlConnection(_connectionString))
{
    string query = @"SELECT TaskName, SUM(TaskLength) as TaskLength FROM myTable " +
          "WHERE EventStartTime BETWEEN '2019/8/17' AND '2019/8/19' GROUP BY TaskName";

      using (SqlCommand cmd = new SqlCommand(query, con))
      {
          con.Open();

          object result = cmd.ExecuteScalar();  // returns 'Downtime'
          string totalMinutes = Convert.ToString(result);

      }
}

我一直在进步。代码执行没有错误,除了结果从 TaskName 列返回“Downtime”,而不是我期望的 SUM(TaskLength) 中的 125。

此查询在 Visual Studio SQL 查询窗口中可以正常工作。

标签: sqlsql-server

解决方案


SUM是一个函数,因此您需要使用SUM(TaskLength)以及GROUP BY您选择的其他不属于聚合操作的字段。

尝试查询以下内容:

Query = 
@"SELECT TaskName, SUM(TaskLength)
 FROM myTable
 WHERE TaskName='Maintenance' AND EventStartTime
 BETWEEN '8/17/2019' AND '8/19/2019'
 GROUP BY TaskName"

推荐阅读