sql-server - 将 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
解决方案
显然错误的第一件事是您使用字符串来查询 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
推荐阅读
- java - 当服务器响应需要很长时间时如何使客户端不断开连接
- python - 如何将通过输入命令输入的值存储在列表中
- java - Robot.getPixelColor 与 BufferedImage.getRGB
- php - 使用 PHP ajax 自动搜索
- c++ - 在终端中杀死 C++ 应用程序,没有调用析构函数?
- apache-spark - 将数据附加到空数据框
- javascript - 在asp.net核心中更改选择后如何调用控制器
- python - Pygame:如何限制该程序在显示某物时不获取键盘事件?
- javascript - 集成 Vimeo API 以上传视频
- python - 用于简单表达式的 Python 正则表达式标记器