来自不同表的oracle sql计数

来自不同表的oracle sql计数,sql,oracle,Sql,Oracle,我有两个表,其中包含以下数据: 1) 转换表 TICKET STATUS 56 0 56 0 2) Resa表 R_TICKET R_STATUS 56 0 如果两个表中的票证计数都匹配,我希望得到这样的结果,然后打印0else1 我尝试了下面的查询,但不起作用 select case when count(a.ticket) = count(b.r_ticket) then 0 els

我有两个表,其中包含以下数据:

1) 转换表

TICKET  STATUS
56       0
56       0
2) Resa表

R_TICKET    R_STATUS
56            0
如果两个表中的票证计数都匹配,我希望得到这样的结果,然后打印
0
else
1

我尝试了下面的查询,但不起作用

select case when count(a.ticket) = count(b.r_ticket) 
            then 0 
            else 1 
       end as result 
from trans a, resa b
它显示
0
,但它应该是
1
,因为
56
的票数在
trans
中是
2
,在
resa中是
1

有关的一些变化: 我想要这样的结果:

TICKET  Count(Ticket) r_Ticket  Count(r_Ticket) result
56       2               56           1           1
58       1               58           1           0

不要在
from
子句中使用逗号。无论如何,在这种情况下这是错误的。如果其中一个表为空,则在聚合之前将得到一个空的中间结果集

相反,使用子查询获取计数:

select (case when a.cnt = b.cnt then 0 else 1
        end) as result 
from (select count(*) as cnt from trans) a
cross join
     (select count(*) as cnt from resa b);

不要在
from
子句中使用逗号。无论如何,在这种情况下这是错误的。如果其中一个表为空,则在聚合之前将得到一个空的中间结果集

相反,使用子查询获取计数:

select (case when a.cnt = b.cnt then 0 else 1
        end) as result 
from (select count(*) as cnt from trans) a
cross join
     (select count(*) as cnt from resa b);

谢谢你的快速回复。事实上我不希望按行计数匹配,我希望票号的计数应该匹配。谢谢你的快速回复。事实上我不希望按行计数匹配,我希望票号的计数应该匹配。问题不清楚。什么是“票数”?在你的第一张桌子上,你有一张单程票,56。你是说“行数”而不是“票数”吗?如果表格中有不止一个票号怎么办?您正在计算表格中的所有行吗?按票号分组的所有行?桌子上有不同的票吗?结果是表之间的比较还是票号的比较?(票号56的计数相等,票号58的计数不同,等等?)票号可以不同,我希望票号应该匹配,例如,在第一个表中,票号56重复两次,在第二个表中,它重复1次,因此它不匹配,它应该打印1。但是,如果另一张票证假设58在第一个表中重复了2次,在第二个表中也重复了2次,那么它匹配的结果应该是0。那么@Tim Biegeleisen的解决方案正是您想要的。问题并不清楚。什么是“票数”?在你的第一张桌子上,你有一张单程票,56。你是说“行数”而不是“票数”吗?如果表格中有不止一个票号怎么办?您正在计算表格中的所有行吗?按票号分组的所有行?桌子上有不同的票吗?结果是表之间的比较还是票号的比较?(票号56的计数相等,票号58的计数不同,等等?)票号可以不同,我希望票号应该匹配,例如,在第一个表中,票号56重复两次,在第二个表中,它重复1次,因此它不匹配,它应该打印1。但是,如果另一个票证假设58在第一个表中重复了2次,在第二个表中也重复了2次,那么它匹配的应该是0。那么@Tim Biegeleisen的解决方案正是您想要的。请检查WITH子句的正确Oracle语法(我怀疑是SQL标准语法),当您有多个CTE时,我不知道Oracle的CTE限制。相反,我只使用了直接子查询。少点味道,多点代码。我不知道你说的Oracle CTE限制是什么意思。Oracle为CTE实现SQL标准语法。当你有多个字符时,你用逗号把它们分开,你就不用再写了。是否有更频繁使用的DBMS,这是正确的语法?(对不起,我只知道Oracle。)除此之外,WITH子句是一个很棒的工具。当您有多个CTE时,请检查WITH子句的正确Oracle语法(我怀疑是SQL标准语法)。@mathguy我不知道Oracle的CTE限制。相反,我只使用了直接子查询。少点味道,多点代码。我不知道你说的Oracle CTE限制是什么意思。Oracle为CTE实现SQL标准语法。当你有多个字符时,你用逗号把它们分开,你就不用再写了。是否有更频繁使用的DBMS,这是正确的语法?(对不起,我只知道Oracle。)除此之外,WITH子句是一个很好的工具。