【问题标题】:SQL sum values day by day from datetime field日期时间字段中的 SQL 总和值
【发布时间】:2018-12-21 09:31:58
【问题描述】:

我有一张桌子:

Date                    NETTO   VAT
2018-09-18 13:06:48.287 15.00   2.80
2018-07-21 17:32:28.620 8.55    1.60
2018-09-07 12:43:07.487 50.70   9.48
2018-09-07 19:32:06.530 57.20   10.70
2018-09-03 17:12:13.837 79.00   14.77
2018-09-08 14:54:25.367 110.45  20.65
2018-10-01 13:04:53.917 60.90   11.39

日期是datetime 类型 喜欢2018-06-15 12:22:43.312

我尝试将 datetime 转换为 date,但我无法查看 NETTO 和增值税的总和

select 
  CONVERT(date, data_sp, 111) As Date, 
  SUM(w_csb) as NETTO , 
  SUM(w_vat) as VAT 
from 
  sales
Group by 
  data_sp
Order by 
  data_sp

我想得到这样的结果: 一天一天的总结

2018-06-15  3335.75 236.68
2018-06-16  199.00  37.21
2018-06-17  1115.00 232.80

【问题讨论】:

  • 请停止弄乱问题格式并尝试使用 HTML - StackOverflow 不会让您注入 HTML。改用编辑器窗口中可用的 Markdown 编辑工具。这次我给你修好了。谢谢。
  • P.S.由于您的编辑,您所需的输出数据不再与输入数据匹配,因此它没有多大意义。不过我们明白了。我已经发布了答案

标签: sql sql-server tsql sql-server-2016


【解决方案1】:

您可以在下面尝试使用cast(data_sp as date) 进行日期转换,并将其添加到group by 子句中

select cast(data_sp as date) As Date, SUM(w_csb) as NETTO , SUM(w_vat) as VAT 
from sales 
Group by cast(data_sp as date) 
order by cast(data_sp as date)

【讨论】:

  • 仍有结果:日期 NETTO 增值税

    2018-06-15 199.00 37.21

    2018-06-15 35.75 6.68

    2018-06-16 199.00 37.21

    2018- 06-17 15.00 2.80

    2018-06-17 19.95 3.73

    我想要一天一天的总和

  • @ArturStolc 。 . .使用此代码,您不应该每天都得到重复。这比转换为字符串要好得多。
【解决方案2】:

fa06's answer 应该适合您,或者,如果您将 datetime 转换为 varchar 而不是 date,您将获得稍微整洁的输出(没有零 d 时间):

SELECT 
  CONVERT(varchar(10), data_sp, 111) AS Date, 
  SUM(w_csb) AS NETTO, 
  SUM(w_vat) AS VAT 
FROM
  sales
GROUP BY 
  CONVERT(varchar(10), data_sp, 111) 
ORDER BY 
  CONVERT(varchar(10), data_sp, 111) 

重要的是,缩短的日期必须在GROUP BYORDER BY子句以及SELECT中,否则它只会按原始日期分组,其中仍然包括次,因此日期仍然被视为唯一值 - 因此不能分组。

根据您上面的示例数据,我的查询将输出:

Date        NETTO   VAT
2018/07/21  8.55    1.60
2018/09/03  79.00   14.77
2018/09/07  107.90  20.18
2018/09/08  110.45  20.65
2018/09/18  15.00   2.80
2018/10/01  60.90   11.39

无论如何,您的大多数日期只出现一次,但正如您所见,它已正确分组 2018-09-07

工作演示(我的和 fa06 的查询):https://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=ed0d4ca3ebd8e45e02be41aaf86c2ef4

【讨论】:

  • 。 .在varchar 中省略长度只是一个坏习惯。
  • @GordonLinoff 谢谢。不过有什么特别的原因吗?
  • 。 .默认长度因 SQL Server 中的上下文而异。当字符串不够大时,你就有一个很难找到的bug。
  • @GordonLinoff 很公平,谢谢。请参阅编辑后的答案。原谅我的无知,但究竟是什么控制了默认长度?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
相关资源
最近更新 更多