A有一个查询,当直接在SQL Server Management Studio中运行时以及从Excel运行时(使用SQLOLEDB提供程序)返回不同的结果。两者都返回一个包含12行(每月一行)和两列(日期和复数计数)的表,但Excel结果集中的某些数值不正确。
我很高兴向您展示完整的细节,但首先,您可以建议哪种类型的东西可以造成这样的差异?
版本:SQL Server 10.50.4000,Excel 2013
编辑:详细信息......
select cast(ActualDate as date) as 'Start of rolling 12 months'
, count(distinct x.con_id) as 'Total Sponsors'
from DateTimeDimV4.dbo.datedim
join (select cm_id, con_id
, cm.start_date as activation_date
, isnull(stop_date, getdate()) as stop_date
from cm
join con_act ca on ca.con_act_db_id = cm.con_act_db_id and ca.con_act_id = cm.con_act_id
where
ca.code = 'corres'
) X on cast(activation_date as date) <= cast(ActualDate as date)
and cast(stop_date as date) > cast(ActualDate as date)
where
--ActualDate = eomonth(ActualDate) -- only works in SQL 2012, so instead we use ...
ActualDate = DATEADD(dd, -DAY(DATEADD(mm, 1, ActualDate)), DATEADD(mm, 1, ActualDate))
and ActualDate >= '31 Jul 2012' and ActualDate <= '30 June 2013'
group by cast(ActualDate as date)
order by cast(ActualDate as date)
在SSMS中,这将返回...
Start of rolling 12 months Total Sponsors
2012-07-31 862
2012-08-31 872
2012-09-30 872
2012-10-31 880
2012-11-30 876
2012-12-31 878
2013-01-31 882
2013-02-28 888
2013-03-31 887
2013-04-30 887
2013-05-31 920
2013-06-30 933
但是在Excel中我得到了......
Start of rolling 12 months Total Sponsors
2012-07-31 862
2012-08-31 872
2012-09-30 872
2012-10-31 880
2012-11-30 876
2012-12-31 878
2013-01-31 882
2013-02-28 887
2013-03-31 887
2013-04-30 887
2013-05-31 887
2013-06-30 887
请注意,前七行是相同的,但Excel在最后五行中重复相同的错误值。
另请注意,如果我将文字日期从“2012年7月31日”和“2013年6月30日”更改为“2011年7月31日”和“2012年6月30日”,则两个环境会生成彼此相同的结果。< / p>
答案 0 :(得分:0)
尝试更改:
and ActualDate >= '31 Jul 2012' and ActualDate <= '30 June 2013'
为:
and ActualDate >= '2012-07-31' and ActualDate <= '2013-06-30'
我的逻辑:我认为MS Query以不同于SSMS的方式解释文字日期。但是,我无法证明这一点,因为我找不到任何关于MS Query的文档。 Scratch。让我们称之为预感。
我通常坚持使用所有日期文字的ISO日期格式。
另外,你为什么缩写7月而不是6月?
答案 1 :(得分:0)
Excel版本正在针对正确的服务器执行查询,但错误的数据库。它是针对一个备份数据库执行的,该数据库的名称只有一个与实际数据库不同的字符。