2010-03-04 2 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 
     ) 

cette requête retourne les données dans le format suivant:Comment classer les résultats de deux requêtes 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 

est-il possible au club le reuslt de deux tables: Am attendant que les données soient dans ce format:

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 

Merci :)

Répondre

2

L'utilisation de UNION ALL à la place des colonnes sous-sélectionnées ajoutera les instructions UNION ALL suivantes à la sélection d'origine. Méfiez-vous, vous avez besoin de la même quantité de colonnes dans chaque instruction select. UNION ALL s'assure que le résultat combiné n'est pas trié/mêlé (la première requête est renvoyée avant la seconde). Une UNION régulière peut/va mélanger/mélanger/trier le résultat.

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

Je ne compte pas sur les résultats retournés dans cet ordre. Sans clause ORDER BY, les lignes de commande sont renvoyées en est non spécifiée, et si vous comptez sur un certain ordre, vous pourriez avoir de gros problèmes un jour. – erikkallen

+0

true, aussi, aurait dû mentionner que UNION filtrera les doublons (requête DISTINCT) alors que UNION ALL ne le fait pas. – cairnz

1

Peut-être que vous devez utiliser l'opérateur 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

essayer les déclarations syndicales

(select1) union (select2)

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

Vous pouvez combiner les deux résultats à l'aide UNION

Exemple:

select col1, col2 
from table1 
where... 

UNION 

select col1, col2 
from table2 
where... 
0

Comme je le vois, vous n'avez pas des conditions de jointure entre les deux ensembles (b et f). Donc, utilisez UNION ou UNION ALL. Refer here.

2

Si vous avez besoin d'interroger ces tables assez souvent ensemble, vous pouvez envisager d'utiliser une vue.

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

Cela vous permettra d'interroger les données comme ceci:

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

C'est aussi une bonne idée qui devrait être considérée par l'affiche originale! – cairnz

Questions connexes