2011-04-19 3 views
2

위젯 생성을위한 레코드를 저장하는 두 개의 테이블 GOODBAD을 가정 해 봅시다. 내 표는 내가이 내가 단일 쿼리로 다음을 결합하고자하는이오라클/SQL - '관련없는'관련없는 테이블의 수 합계

good 
---- 
2 

bad 
--- 
1 

같은 두 개의 테이블을 초래할 것

select count(*) as good from table_good where widget = 'Widget A' and Good = 'Y' 
select count(*) as bad from table_bad where widget = 'Widget A' and Bad = 'Y' 

이 두 가지 기본적인 질문이이

Widget  Good 
---------------- 
Widget A Y 
Widget A Y 
Widget B Y 

Widget  Bad 
---------------- 
Widget A Y 
Widget B Y 

처럼 어디서 이런 식으로 하나의 레코드를 가진 테이블을 얻을 수 있습니까?

good bad 
----------- 
2  1 

다른 사람이이 작업을 수행하는 방법을 알려 줄 수 있습니까? 나는 노조를하고 다른 테이블에서 가짜 컬럼을 설정하는 것이 좋을 것이라고 생각했지만 올바른 테이블 스키마를 다시 얻었지만 두 개의 별도 레코드가있었습니다.

감사합니다.

+0

@Andriy M을 - 당신이 바로했다, 나는'GROUP BY' 나는 일부 테스트 및 작동하지 않았다 해당 쿼리와 함께 예상됩니다. 감사 ! – JNK

답변

5

이 시도 :

SELECT (SELECT COUNT(*) AS good 
     FROM table_good 
     WHERE widget = 'Widget A' 
       AND good = 'Y') AS good, 
     (SELECT COUNT(*) AS bad 
     FROM table_bad 
     WHERE widget = 'Widget A' 
       AND bad = 'Y') AS bad 
FROM dual 
+0

훌륭하게 작동했습니다 .... 지금 이해하려고 노력하고 있습니다 =) – dscl

1

을 또 다른 방법은 FULL JOIN 사용 :

SELECT COALESCE(A.widget,B.widget) AS Widget, COUNT(G.*) AS Good, COUNT(B.*) AS Bad 
FROM table_good G 
FULL OUTER JOIN table_bad B 
ON G.widget = B.widget AND A.Good = B.Bad 
WHERE (G.widget = 'Widget A' OR B.Widget = 'Widget A') 
AND (G.Good = 'Y' OR B.Good = 'Y')