Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较SQL Server查询中的日期范围?_Sql_Sql Server - Fatal编程技术网

如何比较SQL Server查询中的日期范围?

如何比较SQL Server查询中的日期范围?,sql,sql-server,Sql,Sql Server,假设我在如下表格中有数据: | DateTimePurchased | Amount | |----------------------|--------| | 1/1/2017 3:23:15 PM | 657 | | 1/1/2017 3:38:29 PM | 730 | | Day | 2017_Total | 2018_Total | |-------|------------|------------| | Jan 1 | 4354653 | 7686

假设我在如下表格中有数据:

| DateTimePurchased    | Amount |
|----------------------|--------|
| 1/1/2017  3:23:15 PM | 657    |
| 1/1/2017  3:38:29 PM | 730    |
| Day   | 2017_Total | 2018_Total |
|-------|------------|------------|
| Jan 1 | 4354653    | 7686787    |
| Jan 2 | 3453634    | 6546456    |
我想运行一个输出如下的查询:

| DateTimePurchased    | Amount |
|----------------------|--------|
| 1/1/2017  3:23:15 PM | 657    |
| 1/1/2017  3:38:29 PM | 730    |
| Day   | 2017_Total | 2018_Total |
|-------|------------|------------|
| Jan 1 | 4354653    | 7686787    |
| Jan 2 | 3453634    | 6546456    |
等等


如何为SQL Server编写查询?

我将这样表述:

select month(DateTimePurchased) as mm, day(DateTimePurchased) as dd,
       sum(case when year(DateTimePurchased) = 2017 then amount end) as total_2017,
       sum(case when year(DateTimePurchased) = 2018 then amount end) as total_2018
from t
group by month(DateTimePurchased), day(DateTimePurchased)
order by mm, dd;

这将“日期”分为两列,一列表示月份,一列表示日期。这实际上使结果更易于处理,因为您可以更轻松地对结果进行排序。

Gordon Linoffs的答案是正确的

下面的查询正好提供了您所要求的内容

选择(左(DATENAME(MONTH,GETDATE()),3))+“”+CAST((DAY(DATE_ADDED))作为NVARCHAR(10))作为[DAY],
金额(如果年份(添加日期)=2017年,则金额结束)为[2017年总计],
金额(如果年份(添加日期)=2018年,则金额结束)为[2018年总计]
来自TBLDATE
按月份分组(添加日期),按天分组(添加日期)

按[日期]订购。

谢谢@gordon linoff!我很难适应这个做一个月比一个月的比较。例如,如果我想比较2017年2月和3月。很明显,他们没有相同的天数,但我想比较2月1日和3月1日,2月2日和3月2日,等等。。。你能帮忙吗?@Infin8Loop。这是一个不同的问题,所以作为一个不同的问题来问。一定要包括你想看到的结果。每个月怎么样?因此,行可能是日数(1、2、3、4),列可能是(2017年2月2日、2017年3月2日),等等。。。“我很难把这些放在一起。@Infin8Loop这是完全不同的查询和问题。你可以把它作为新问题发布。