在sql中加入两列作为日期

Posted

技术标签:

【中文标题】在sql中加入两列作为日期【英文标题】:Join two columns as a date in sql 【发布时间】:2020-02-26 22:03:20 【问题描述】:

我目前正在通过 Microsoft Query 处理一份报告,我遇到了这个问题,我需要计算过去一年的总金额。

表格如下所示:

Item Number | Month | Year | Amount |
...........PAST YEARS DATA...........
  12345     |   1   | 2019 |   10   |
  12345     |   2   | 2019 |   20   |
  12345     |   3   | 2019 |   15   |
  12345     |   4   | 2019 |   12   |
  12345     |   5   | 2019 |   11   |
  12345     |   6   | 2019 |   12   |
  12345     |   7   | 2019 |   12   |
  12345     |   8   | 2019 |   10   |
  12345     |   9   | 2019 |   10   |
  12345     |   10  | 2019 |   10   |
  12345     |   11  | 2019 |   10   |
  12345     |   12  | 2019 |   10   |
  12345     |   1   | 2020 |   10   |
  12345     |   2   | 2020 |   10   |

您将如何计算商品编号12345 从 02-2019 到 02-2020 的总金额?

【问题讨论】:

你想要这个东西在 SQL 还是 Excel 中? 最好在 SQL 中! :) @WhyMyCodeLong:那么,请用您正在使用的数据库标记您的问题。 【参考方案1】:

假设您正在运行 SQL Server,您可以使用 datefromparts() 重新创建一个 date 并将其用于过滤:

select sum(amount)
from mytable
where 
    itemnumber = 12345
    and datefromparts(year, month, 1) >= '20190201'
    and datefromparts(year, month, 1) < '20200301'

【讨论】:

是否可以动态运行此查询?我可以使用 getdate() 代替“20200301”吗? 你可以使用类似的东西:datefromparts(year, month, 1) between DATEADD(year,-1,GETDATE()) and GETDATE() 您好 GMB,对于延迟回复感到抱歉。代码完美运行。非常感谢!还要感谢@CR7SMS 的动态代码。【参考方案2】:

你也可以用这个

 SELECT sum(amount) as Amount
 FROM YEARDATA
 WHERE ( Month >=2 and year = '2019')
 or ( Month <=2 and year = '2020')
 and ItemNumber = '12345'

【讨论】:

以上是关于在sql中加入两列作为日期的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 从单列到两列的所有日期组合

SQL查询从两列中检索两个日期之间的数据

MySQL在不使用表列的情况下选择两列之间的范围日期

在 SQL 中加入表后,通过从当前日期中减去日期列来创建新列

如何在 C# 中加入两条路径?

SQL 选择较早的日期(包括 NULL)