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 двух таблиц: Am ожидает данные, чтобы быть в следующем формате:

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.

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 ALL - нет. – cairnz

1

Возможно, вам нужно использовать оператора UNION? 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

попробовать союз заявление

(select1) объединение (Выбор2)

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

Вы можете объединить два результата с помощью UNION

Пример:

select col1, col2 
from table1 
where... 

UNION 

select col1, col2 
from table2 
where... 
0

Как я вижу, у вас нет каких-либо условий соединения между двумя наборами (b и f). Поэтому используйте 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

Смежные вопросы