遇到一个Union all和Union超强的问题!

xtjack 2009-03-07 04:29:53
有两台数据库服务器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的话,一切正常!
...全文
241 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqhmitzk 2009-03-07
  • 打赏
  • 举报
回复
union all不会去掉重复的行,union去掉重复行。
统计用select sunm(isnull(col1,))
1+null+2... 的结果为null
wantodba 2009-03-07
  • 打赏
  • 举报
回复
请仔细研究UNION ALL与UNION的区别
Rotel-刘志东 2009-03-07
  • 打赏
  • 举报
回复
union all不会去掉重复的行,而union会去掉重复行。
xtjack 2009-03-07
  • 打赏
  • 举报
回复
1、不需要去掉重复行
2、出现的问题是需要统计的数据在第一个查询sql里面,union all的查询语句其实是没有数据的,因此有没有这个可能,统计的时候union all的运行原理是先对第一个sql符合条件的进行统计,再对第二个sql语句进行统计,然后所有统计在相加,这样的话第二个sql语句统计出来的数据肯定是null,那么2个统计结果相加就是null了。
另外需要统计的列都是有数据的并且格式都是正确,哎!
htl258_Tony 2009-03-07
  • 打赏
  • 举报
回复
1.先确定你的需求是否需要去重复行
2.对统计数据列加 isnull(col,0)
kye_jufei 2009-03-07
  • 打赏
  • 举报
回复
union all不会去掉重复的行,union会去掉重复的行(distinct)
友情up

百年树人 2009-03-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sdhdy 的回复:]
是挺奇怪的,帮顶!
[/Quote]
  • 打赏
  • 举报
回复
union all不会去掉重复的行,union会去掉重复的行
sdhdy 2009-03-07
  • 打赏
  • 举报
回复
是挺奇怪的,帮顶!

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧