2010-03-04 3 views
1
SELECT * FROM(
     (SELECT 
      count(DISTINCT RECEPIENT_ID) as NoOfUsers, 
      TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') as accDate 
     FROM 
      ALRT_PLATFORM_ALRT_HSTRY 
     where 
      APPL_CD like 'EBP' and 
      ALRT_RSPNS_FROM_CLIENT_ID like 'BB' 
      group by TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') 
     ) b, 

     (SELECT 
      count(DISTINCT RECEPIENT_ID) as NoOfUsers, 
      TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') as accDate 
     FROM 
      ALRT_PLATFORM_ALRT 
     where 
      APPL_CD like 'EBP' and 
      ALRT_RSPNS_FROM_CLIENT_ID like 'BB' 
      group by TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') 
     ) f 
     ) 

이 쿼리는 다음과 같은 형식으로 데이터를 반환 :두 SQL 쿼리의 결과를 얻는 방법은 무엇입니까?

NOOFUSERS    ACCDATE NOOFUSERS    ACCDATE  
---------------------- ---------- ---------------------- ---------- 
2      2009-12-21 1      2010-03-01 
2      2009-12-21 2      2010-03-02 
2      2009-12-21 1      2010-03-03 
1      2009-12-23 1      2010-03-01 

클럽에 가능한 두 테이블의 reuslt 그 것이다 : 이 형식으로 데이터를 기대하고 있습니까 :

NOOFUSERS    ACCDATE  
---------------------- ---------- 
2      2009-12-21 
1      2009-12-23 
1      2010-01-02 
1      2010-01-04 //till here its table one data 
1      2010-03-01 //from here its table TWO data 
2      2010-03-02 
1      2010-03-03 

감사합니다.

답변

2

하위 선택 열 대신 UNION ALL을 사용하면 후속 UNION ALL 문을 원래 SELECT에 추가합니다. 각 select 문에서 같은 양의 열이 필요하다는 점에주의하십시오.

UNION ALL은 결합 된 결과가 정렬/혼합되지 않도록합니다 (첫 번째 쿼리는 두 번째 전에 반환됩니다). 정규 UNION은 결과를 혼합/혼합/정렬 할 수 있습니다.

SELECT 
      count(DISTINCT RECEPIENT_ID) as NoOfUsers, 
      TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') as accDate 
     FROM 
      ALRT_PLATFORM_ALRT_HSTRY 
     where 
      APPL_CD like 'EBP' and 
      ALRT_RSPNS_FROM_CLIENT_ID like 'BB' 
      group by TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') 


UNION ALL 

     SELECT 
      count(DISTINCT RECEPIENT_ID) as NoOfUsers, 
      TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') as accDate 
     FROM 
      ALRT_PLATFORM_ALRT 
     where 
      APPL_CD like 'EBP' and 
      ALRT_RSPNS_FROM_CLIENT_ID like 'BB' 
      group by TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') 
+1

나는 결과가 순서대로 반환에 의지하지 않을 것입니다. ORDER BY 절이 없으면 순서 행이 반환되지 않으며, 특정 순서에 의존하면 언젠가 큰 문제가 발생할 수 있습니다. – erikkallen

+0

사실, 또한 UNION이 중복 (DISTINCT 쿼리)을 필터링하는 반면 UNION은 필터링하지 않을 것이라고 언급 했어야합니다. – cairnz

1

아마도 UNION 연산자를 사용해야합니까?

SELECT count(DISTINCT RECEPIENT_ID) as NoOfUsers, 
      TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') as accDate 
     FROM 
      ALRT_PLATFORM_ALRT_HSTRY 
     where 
      APPL_CD like 'EBP' and 
      ALRT_RSPNS_FROM_CLIENT_ID like 'BB' 
      group by TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') 

UNION  
    SELECT count(DISTINCT RECEPIENT_ID) as NoOfUsers, 
      TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') as accDate 
     FROM 
      ALRT_PLATFORM_ALRT 
     where 
      APPL_CD like 'EBP' and 
      ALRT_RSPNS_FROM_CLIENT_ID like 'BB' 
      group by TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') 
0

http://dev.mysql.com/doc/refman/5.5/en/union.html 노조 문을 시도

당신은 사용하여 두 결과를 결합 할 수 있습니다

SELECT 
     count(DISTINCT RECEPIENT_ID) as NoOfUsers, 
     TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') as accDate 
    FROM 
     ALRT_PLATFORM_ALRT_HSTRY 
    where 
     APPL_CD like 'EBP' and 
     ALRT_RSPNS_FROM_CLIENT_ID like 'BB' 
     group by TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') 

UNION 

    SELECT 
     count(DISTINCT RECEPIENT_ID) as NoOfUsers, 
     TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') as accDate 
    FROM 
     ALRT_PLATFORM_ALRT 
    where 
     APPL_CD like 'EBP' and 
     ALRT_RSPNS_FROM_CLIENT_ID like 'BB' 
     group by TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') 
0

(선택 1) 노동 조합 (선택 2) UNION

예 :

select col1, col2 
from table1 
where... 

UNION 

select col1, col2 
from table2 
where... 
0

내가 볼 때, 당신은 어떤 두 세트 (bf) 사이의 조인 조건이 없습니다. 따라서 UNION 또는 UNION ALL을 사용하십시오. Refer here.

2

이러한 테이블을 매우 자주 쿼리해야하는 경우보기를 사용할 수 있습니다.

create view alrt_platform_alrt_all as 
    select * from alrt_platform_alrt 
union all 
    select * from alrt_platform_alrt_hstry; 

이 다음과 같이 데이터를 조회 할 수있는 것 :

select 
    count(distinct recepient_id), 
    TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD') as accDate 
from alrt_platform_alrt_all 
where appl_cd like 'EBP' 
    and alrt_rspns_from_client_id like 'BB' 
group by TO_CHAR(ACTN_TAKE_DATA_TM,'YYYY-MM-DD'); 
+0

원래 포스터로 고려해야 할 좋은 아이디어이기도합니다! – cairnz

관련 문제