2015-02-05 3 views
0

두 개의 다른 쿼리에서 얻은 결과를 필터링하여 총 수를 얻고 싶습니다. 아래는 두 가지 질문입니다.첫 번째 쿼리와 두 번째 쿼리의 결과를 빼는 방법

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 

원하는 결과는 두 개의 즉, 134-77 = 57을 뺍니다. 어떻게 그것을 sybase에서 달성 할 수 있습니까?

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') 

답변

1

이 시도 :

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

이 쿼리는 단지 표에 존재하지만 #에 존재하지 않는 행을 반환

+0

정말 고마워요. – Alpesh003

0

이 하나의 시도 임시 값은 순서 값과 필터 조건을 기반으로합니다. 따라서 위의 내용은 전체 개수, 필터링 된 개수 및 둘 사이의 차이를 가져 오는 것과 같습니다.

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

주어진 테이블 별칭 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 검사를 사용했습니다.

+0

고마워. 이거 하나 너무 작동 .. 우리가 오직 한 대답을 표시 할 수 있습니다 :) – Alpesh003

+1

당신은 투표 할 수 있습니다 ...-) –

관련 문제