【问题标题】:sum column table filter by data按数据求和列表过滤
【发布时间】:2013-07-11 20:33:03
【问题描述】:

在这张表中:

        Total           Data 
     -----------------------------
         1            2013-07-10 16:37:29.573
        1,5           2013-07-10 16:38:29.573
        0,75          2013-07-10 16:39:29.573
        1,99          2013-07-10 16:40:29.573

我一直在写这个 ms-sql 程序:

     ALTER proc [dbo].[empcx](@caixa int,@inicio datetime)as
     select sum(total) ttotal from alteraca 
     where (DATA >= @inicio AND DATA <= @inicio) and caixa=@caixa and pedido <>0

但我这样称呼我:

     empcx 6 , '11/07/2013'

并且只返回 null ,需要强制转换什么的??? 我会用这个参数在 C# 中调用这个过程

     label4.Text = dateTimePicker1.Value.ToShortDateString();   

【问题讨论】:

  • DATA &gt;= @inicio AND DATA &lt;= @inicio = DATA = @inicio
  • 是的,正如@mr.Reband 所说,您的 where 子句将过滤掉除 DATA = '@inicio' 之外的所有值。你想在 where 子句中完成什么?

标签: sql sql-server visual-studio-2010 sql-server-2008


【解决方案1】:

参数@inicio的值为2013-07-11 0:00:00.000;

但在此过程中,您将此值与包含时间组件的日期进行比较,例如 2013-07-10 16:37:29.573

由于您使用的是 (DATA >= @inicio AND DATA

试试

 ALTER proc [dbo].[empcx](@caixa int,@inicio datetime)as
     select sum(total) ttotal from alteraca 
     where (Convert(varchar(10),DATA,101) = Convert(varchar(10),@inicio,101))
       and caixa=@caixa and pedido <>0

【讨论】:

    【解决方案2】:

    我同意 Bingham 先生的回答,但我会使用稍微不同的方法进行比较:

     ALTER proc [dbo].[empcx](
       @caixa int,
       @inicio datetime
     )
     as
     select sum(total) ttotal 
     from   alteraca 
     where  (DATA >= @inicio AND DATA < DATEADD(dd, 1, @inicio)) 
       and  caixa=@caixa 
       and  pedido <>0
    

    我还没有运行测试,但我相信这会更快。

    此外,如果您的 total 值确实是您所显示的 - 逗号分隔的数字字符串 - 当您真正开始返回记录时,您的查询将崩溃。逗号分隔的字符串不能应用 SUM,因为它不能被解析为单个数字。

    【讨论】:

    • 有趣的变化。有时间我会研究的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2017-12-15
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    相关资源
    最近更新 更多