首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用vb.net和sql计算日销售额

如何使用vb.net和sql计算日销售额
EN

Stack Overflow用户
提问于 2022-11-21 13:10:22
回答 2查看 42关注 0票数 0

我想通过日期将账单表中的金额汇总,并将其作为每日销售报告

表列是客户端名称、数量、BDate --这是我尝试过的

代码语言:javascript
运行
复制
   Dim query = "SELECT SUM(Amount)as sales FROM BillTbl where [BDate] = ? "
        Dim conkey As New SqlConnection(con)
        Dim cmd = New SqlCommand(query, conkey)
        cmd.Parameters.AddWithValue("@BDate", Now.ToString("MM/dd/yyyy"))

        conkey.Open()
        Dim total As Double = Convert.ToDouble(cmd.ExecuteScalar())
        check.Text = total.ToString
        conkey.Close()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-21 17:36:32

假设BDate的类型是DateDateTime,而不是 varchar (这将是非常糟糕的):

代码语言:javascript
运行
复制
Dim query = "SELECT SUM(Amount)as sales FROM BillTbl where [BDate] = cast(current_timestamp as Date)"

Using conkey As New SqlConnection(con), _
      cmd As New SqlCommand(query, con)

    conkey.Open()
    Dim total As Decimal = Convert.ToDecimal(cmd.ExecuteScalar())
End Using

我还想讨论查询参数,但正如您所看到的,在上面的代码中根本不需要任何参数;数据库有自己的获取当前时间的方法。因此,我将添加另一个示例,说明使用(现在不必要的)参数的正确方法:

代码语言:javascript
运行
复制
Dim query = "SELECT SUM(Amount)as sales FROM BillTbl where [BDate] = @BDate"

Using conkey As New SqlConnection(con), _
      cmd As New SqlCommand(query, con)

    ' Always choose an SqlDbType and Length to match the database column
    cmd.Parameters.Add("@BDate", SqlDbType.Date).Value = DateTime.Today
    conkey.Open()
    Dim total As Decimal = Convert.ToDecimal(cmd.ExecuteScalar())
End Using

注意,查询中的参数占位符的名称与我们稍后使用的名称相匹配。还请注意,我们给了参数一个显式的类型。AddWithValue()存在一个问题,可能导致严重的性能问题。另一个改变是用一个更安全的.Close()块代替Using块。如果查询有异常,则.Close()代码可能永远不会运行,但Using块仍将关闭连接。另外,请注意,我们从未将日期值转换为字符串。如果您发现自己将日期转换为在SQL中使用的字符串,则会出现一些非常错误的情况,特别是问题中的MM/dd/yyyy格式对SQL不正确。

最后,请注意这两个示例中的total变量在代码块完成后立即超出范围。您可能需要在作用域中的早期声明变量,以使其具有更大的作用域,然后此时只需设置值。

票数 0
EN

Stack Overflow用户

发布于 2022-11-21 14:08:04

我知道这不是一个答案,但我还不能添加评论:(

您是否可以包括Sales表的DDL以及一些示例数据,并包括您希望对该示例数据运行查询时会返回的结果?这可能对解决你的问题有很大的帮助。

乍一看,您的解决方案似乎应该有效,但如果没有DDL和示例数据以及所需的结果,我就无法做出明确的声明。

如果您只想按日期销售,而不考虑ClientName,您可以尝试如下:

代码语言:javascript
运行
复制
SELECT [BDate], SUM([Amount]) AS Sales FROM [BillTbl] GROUP BY [BDate]

如果这是Server,并且您的BDate列也包含时间值,则可以尝试如下:

代码语言:javascript
运行
复制
SELECT CAST([BDate] AS DATE), SUM([Amount]) AS [Sales] FROM [BillTbl] GROUP BY CAST([BDate] AS DATE)

或者,如果您的Server版本较早,则应该可以这样做:

代码语言:javascript
运行
复制
SELECT CONVERT(VARCHAR(10), [BDate], 102), SUM([Amount]) AS [Sales] FROM [BillTbl] GROUP BY CONVERT(VARCHAR(10), [BDate], 102)

(再次抱歉,请原谅我的无知,这只是我第二次尝试回答,就像我说的,这真的应该是一个评论。)

我希望这对某些人有价值。注意:索引对我的示例查询没有多大帮助,但如果有必要,也有其他方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74519480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档