2

我创建了一个查询,该查询在 Microsoft SQL Server Management Studio express 中执行时显示的数据与在浏览器中使用cfdump或输出时显示的数据不同cfoutput

这是查询:

select count(stat_id) as val, month(status_date) as mnth, year(status_date) as yr
from task_status ts
join appraisal.dbo.employee e on e.userID = ts.user_ID
where e.comp = 1
and e.dept = 2
and e.archive != 1
and ts.status_date between '2016-10-01 00:00:00' AND '2017-10-01 00:00:00'
group by month(status_date), year(status_date)
order by year(status_date), month(status_date)

在 Management Studio 中看到的预期结果和结果是:

YR  MNTH YR
1   10  2016
1   11  2016
9   2   2017
4   3   2017
3   4   2017
18  5   2017
6   6   2017
1   7   2017 

但是,从浏览器看到的结果是:

YR  MNTH    VAL
2016    1   7
2016    2   13
2016    3   5
2016    4   5
2016    5   1
2016    6   4
2016    7   2
2016    10  1
2016    11  1 

任何关于可能导致这种情况的建议都将受到欢迎,因为我不知道为什么会有差异。

4

1 回答 1

1

编辑:

尝试将查询中的日期更改为

select count(stat_id) as val, month(status_date) as mnth, year(status_date) as yr
from task_status ts
INNER JOIN appraisal.dbo.employee e on e.userID = ts.user_ID
    AND e.comp = 1
    AND e.dept = 2
    AND  e.archive != 1
WHERE ts.status_date between '20161001' AND '20171001'
group by year(status_date), month(status_date)
order by year(status_date), month(status_date)

参见ISO 8601。您还可以将日期更改为'2016-10-01T00:00:00' AND '2017-10-01T00:00:00'.

我相信您的日期可能会被解释为读取为 YYYY-DD-MM 的字符串,并在通过 ColdFusion 或 JVM 传递给 SQL 时给出错误的范围。

==================================================== ========================

原来的:

这更多是个人喜好评论:

更改JOIN语法以将条件移出WHERE和移入JOIN.

select count(stat_id) as val, month(status_date) as mnth, year(status_date) as yr
from task_status ts
INNER JOIN appraisal.dbo.employee e on e.userID = ts.user_ID
    AND e.comp = 1
    AND e.dept = 2
    AND  e.archive != 1
WHERE ts.status_date between '2016-10-01 00:00:00' AND '2017-10-01 00:00:00'
group by year(status_date), month(status_date)
order by year(status_date), month(status_date)

JOIN创建表时,想象一下您正在使用的数据集会有所帮助。当您在 中指定条件时WHERE,您将创建一个 bigJOIN然后使用该WHERE子句过滤掉这些结果。我认为较新版本的 SQL 的优化器更智能,但我知道当条件处于 aLEFT OUTER JOIN与 a时,2005 可以返回不同的结果WHEREINNER JOIN不会有什么不同,但OUTER可以。

我还更改了您的GROUP BY. 它不应该改变结果,但它更清晰,更符合数据可能使用方式的分组(按年分组,然后是这些年的月份)。

JOIN还有个人喜好:我喜欢添加,而不仅仅是使用,INNER JOIN只是为了更清楚地说明我在做什么。

于 2017-11-02T21:33:31.370 回答