首页 > 解决方案 > 将 SUM() 与 Where 子句一起使用的 SQL 命令

问题描述

请我用手机打字,因为我没有使用笔记本电脑,不要降低我的声誉。

我的 SQL 服务器数据库中有一个名为 Total_Amount 的列,我想获取特定收银员特定日期的 Sum(Total_Amount)。我只能获取特定的收银员,但如果我想对收银员和日期都使用 WHERE 子句,它不会返回任何内容。该命令在 SQL Server Management Studio 中运行良好,但来自 VB。NET,它没有。

以下是我的代码。

         Dim conn As New SqlConnection("data. 
         source=PRECIOUSMUM\MSSQLSERVER_1; initial.    
         catalog=inventory; user id=mantics; 
         password=emudeji;")
        Try
        'Dim Total_Amountss As Double
        conn.Open()
        Dim cmd = New SqlCommand
        With cmd

            .Connection = conn
            .CommandText = "SELECT   SUM(Total_Amount) 
          AS Total_Amount FROM tblOrder WHERE.    
        (cashier=@cashier) AND (Order_date=@Order_date)"
            .Parameters.AddWithValue("@cashier", 
         lbl_Cashier_Name.Text)
            .Parameters.AddWithValue("@Order_date", Date.Today.ToString)
            '.Parameters.AddWithValue("@enddate", dtpicker.Value.Date)

        End With

        Dim dr As SqlDataReader
        dr = cmd.ExecuteReader
        dr.Read()

        If IsDBNull(dr("Total_Amount")) Then
            lbl_cashier_Totalsales.Text = "N0.00"
        Else
            Dim str As Double
            str = dr.Item("Total_Amount")
            lbl_cashier_Totalsales.Text = FormatCurrency(dr.Item("Total_Amount"))
        End If

标签: sql-servervb.net

解决方案


显然错误的第一件事是您使用字符串来查询 Date 列。这永远不会正确,因为字符串是您用来向最终用户显示日期的东西。这不是数据库(或 .NET)存储日期值的方式。因此,不是使用字符串查询日期列,而是直接在 Add 方法中传递 C# DateTime 值并指定参数的 DataType。第二个可能的错误是由于如果您还存储了时间部分,那么传递像今天这样的日期将永远不会匹配任何行,而只会匹配具有 00:00:00 作为时间值的行。

您需要查询 >= 开始日期的午夜和次日的 <。

这种考虑将给出这样的查询:

With cmd
   .Connection = conn
   .CommandText = "SELECT SUM(Total_Amount) AS Total_Amount 
                   FROM tblOrder 
                   WHERE (cashier=@cashier) AND 
                   (Order_date >= @StartDate AND 
                    Order_date < @EndDate)"
   .Parameters.Add("@cashier", SqlDbType.NVarChar).Value = lbl_Cashier_Name.Text
   .Parameters.Add("@StartDate", SqlDbType.DateTime).Value = Date.Today
   .Parameters.Add("@EndDate", SqlDbType.DateTime).Value = Date.Today.AddDays(1)
End With

推荐阅读