Pat*_*ick 1 sql sql-server-2008
采取以下声明:
select count( 1 ) as cnt from tbl where val= 1
union
select count( 1 ) as cnt from tbl where val = 0
Run Code Online (Sandbox Code Playgroud)
如果两个选择返回相同的值,则结果是具有该值的单个行.如果选择返回不同的值,则结果为具有两个值的两行.为什么?
我试图使用以下方法查找行的总数:
select sum (cnt) from
(
select count( 1 ) as cnt from tbl where value = 1
union
select count( 1 ) as cnt from tbl where value = 0
) as tbl2
Run Code Online (Sandbox Code Playgroud)
如果计数不同,它会按预期工作但如果计数相同则给出一半的值...
(PS:更感兴趣的是为什么sql的行为方式比解决方案更好)
此行为是设计使然.您应该使用它UNION ALL来实现您想要的行为.基本上,UNION执行set union操作,删除集合中的重复项.
http://www.fmsinc.com/free/NewTips/SQL/SQLtip5.asp