如何减去第一个查询和第二个查询的结果

时间:2015-02-05 06:03:27

标签: sql sybase

我想过滤掉从两个不同查询中获得的结果并获得总计数。以下是我的两个问题:

    Query 1
    select count(*) 
    from table1 oow
    where oow.status='completed'--134 records

    Query 2
    select count(*) 
    from table2 oow 
    join #temp re
    on oow.order=re.order
    where oow.status='completed'--77 records

期望的结果是减去两个I.e.,134-77 = 57。 我如何在sybase中实现这一目标。

4 个答案:

答案 0 :(得分:2)

给定表别名oow我将假设query1中的table1和query2中的table2实际上是同一个表。如果是这种情况,你可以这样做:

select count(*) 
from 
    table2 oow 
    left join #temp re
        on oow.order=re.order
where oow.status='completed' 
    and re.order is null

我使用左连接和检查null而不是执行减法。

答案 1 :(得分:1)

使用Cross Join

SELECT fst - scd
FROM   (SELECT Count(*) AS fst
        FROM   table1 oow
        WHERE  oow.status = 'completed'),--134 records
       (SELECT Count(*) AS scd
        FROM   table2 oow
               JOIN #temp re
                 ON oow.ORDER = re.ORDER
        WHERE  oow.status = 'completed') 

答案 2 :(得分:1)

试试这个:

select count(*)
from table1
where not exists
(select 1 
from #temp re
where re.order = order and status = 'Completed')

此查询仅返回table1中存在但在#temp中不存在的那些行,具体取决于订单值和过滤条件。因此,上述内容相当于获取总计数,过滤计数和两者之间的差异。

答案 3 :(得分:0)

试试这个:

SELECT
        (select count(*) 
        from table1 oow
        where oow.status='completed')
        -
        (select count(*) 
        from table2 oow 
        join #temp re
        on oow.order=re.order
        where oow.status='completed')