从Excel运行时,SQL查询返回不同的结果

时间:2013-12-18 01:39:06

标签: sql-server excel

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>

2 个答案:

答案 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)

确实是PICNIC!抱歉浪费你的时间。

Excel版本正在针对正确的服务器执行查询,但错误的数据库。它是针对一个备份数据库执行的,该数据库的名称只有一个与实际数据库不同的字符。