Sql 防止/不显示结果集的另一种方法
如果tab1和tab2只返回结果,那么我是否希望 最后选择0,0。。。被退回Sql 防止/不显示结果集的另一种方法,sql,sql-server-2008,rdbms,Sql,Sql Server 2008,Rdbms,如果tab1和tab2只返回结果,那么我是否希望 最后选择0,0。。。被退回 select tab1.openedcnt, tab2.closedcnt, 'ModuleA' AS Module from (select count(*) openedcnt,'constant1' const WHERE 1=1) tab1 cross join (select count(*) closedcnt,'constant2' const WHERE 1=2 )tab2-- simulatin
select tab1.openedcnt, tab2.closedcnt, 'ModuleA' AS Module
from
(select count(*) openedcnt,'constant1' const
WHERE 1=1) tab1
cross join
(select count(*) closedcnt,'constant2' const
WHERE 1=2 )tab2-- simulating no result set returned
union
select 0,0,'ModuleA'
结果
openedcnt closedcnt Module
0 0 ModuleA
1 0 ModuleA
我无法摆脱交叉连接。
where语句仅用于本示例
例如…如果tab1返回结果,而tab2不返回结果
然后我希望得到的结果
openedcnt closedcnt Module
1 0 ModuleA
openedcnt closedcnt Module
0 0 ModuleA
如果tab1和tab2不返回结果,那么我希望得到
openedcnt closedcnt Module
1 0 ModuleA
openedcnt closedcnt Module
0 0 ModuleA
谢谢您的帮助。嗯。我认为您可以直接使用union all而不是exists来完成这项工作。以下是想法:
with tab1 as (
select count(*) openedcnt, 'constant1' const
where 1=1
),
tab2 as (
select count(*) closedcnt, 'constant2' const
where 1=2
)
select tab1.*
from tab1
union all
select tab2.*
from tab2
union all
select 0, 0, 'ModuleA'
where not exists (select 1 from tab1) and not exists (select 1 from tab2);
请注意,使用CTE可以使查询更易于编写和读取。对不起……当我只有sql server 2008时,我错误地标记了sql server 2008 r2。我得到了Msg 102,15级,状态1,第36行,靠近“,”的语法不正确。tab2前面的逗号。