有两台数据库服务器A和B,A为生产服务器,B为备份查询服务器,在A上有一个表的视图,是链接生产服务器和备份服务器的,在A上创建了链接到B的链接服务器名BB,视图如下:
Create View VW_A
as
select * from A
union all
select * from BB.db.dbo.A问题来了,在使用统计函数sum的时候,如果只统计在生产库表中的数据的时候
select sum(col1) from VW_A where datetime>'' 这条语句的数据只在生产中,但是统计出来的数据是null,
但是如果统计条件的数据在备份和生产中都有的话,统计出来的数据就不是null,多么奇怪的问题呀,是否是数据库服务设置的问题??
但是如果使用union的话,一切正常!

解决方案 »

  1.   

    union all不会去掉重复的行,union会去掉重复的行
      

  2.   

    union all不会去掉重复的行,union会去掉重复的行(distinct)
    友情up
      

  3.   

    1.先确定你的需求是否需要去重复行
    2.对统计数据列加 isnull(col,0)
      

  4.   

    1、不需要去掉重复行
    2、出现的问题是需要统计的数据在第一个查询sql里面,union all的查询语句其实是没有数据的,因此有没有这个可能,统计的时候union all的运行原理是先对第一个sql符合条件的进行统计,再对第二个sql语句进行统计,然后所有统计在相加,这样的话第二个sql语句统计出来的数据肯定是null,那么2个统计结果相加就是null了。
    另外需要统计的列都是有数据的并且格式都是正确,哎!
      

  5.   

    union  all不会去掉重复的行,而union会去掉重复行。
      

  6.   

    请仔细研究UNION ALL与UNION的区别
      

  7.   

    union  all不会去掉重复的行,union去掉重复行。
    统计用select sunm(isnull(col1,))
    1+null+2... 的结果为null