2010-12-08 9 views
1
SELECT a.coupon_upc,a.coup_desc,a.coup_dep,a.manuf,a.coupon_type,r.hh_red,r.red_qty, 
     r.red_val,a.coups_mailed,a.households_mailed 
FROM 

     (SELECT coupon_upc, 
       min(coupon_description) coup_desc, 
       min(campaign_manufacturer_desc) manuf, 
       min(coupon_department) coup_dep, 
       coupon_type, 
       sum(households_red) hh_red, 
       sum(coup_qty) red_qty, 
       sum(redeem_value) red_val 
      FROM lcm_eval.lcm_compare_redeemed_cell r, 
       dim_campaign c 
     WHERE r.campaign_id = c.campaign_id 
      and c.campaign_code = '&LCMXXXX' 
      and r.cell_key in (41) 
     group 
      by coupon_upc, 
       coupon_type) r, 

     (SELECT /*+ use_hash(a b c) */ 
       d.coupon_upc, 
       d.coup_desc, 
       d.manuf,d.coup_dep, 
       d.coupon_type, 
       sum(a.counts) coups_mailed, 
       sum(a.households) households_mailed 
      FROM lcm_eval.lcm_current_coupon_alloc_cell a, 
       dim_campaign c, 
       (SELECT distinct 
         coupon_upc, 
         min(coupon_description) coup_desc, 
         min(campaign_manufacturer_desc) manuf, 
         min(coupon_department) coup_dep, 
         coupon_type 
        FROM contact_coupon_details 
       WHERE schedule_key = '23' 
       group by coupon_upc,coupon_type) d 
     WHERE a.campaign_id = c.campaign_id 
      and c.campaign_code = '&LCMXXXX' code 
      and a.cell_key in (41) 
      and a.coupon_upc = d.coupon_upc 
     group by d.coupon_upc, d.coup_desc, d.manuf, d.coup_dep, d.coupon_type) a 
WHERE a.coupon_upc = r.coupon_upc (+) 
ORDER by a.coupon_type; 

La colonne que j'ai besoin de résumer est (r.red_qty/a.households_mailed). Cela doit se faire par groupes de (cellkey, a.coupon_type). c'est-à-dire pour chaque combinaison de (cellkey, a.coupon_type) quelle est la valeur de (r.red_qty/a.households_mailed).Problème avec une requête complexe dans Oracle

Quelqu'un peut-il suggérer un seul SQL pour faire la même chose ou un bloc anonyme pour le même?

+0

quelle version d'Oracle? (J'ai remarqué des jointures de style ancien se demandant si cela a la contrainte supplémentaire de 8i) – Harrison

+0

Oracle 10g.Le code est un vieux. C'est à peu près tout. –

Répondre

2

Vous pouvez placer votre requête dans une autre requête de sélection qui exécutera le résumé par les colonnes cellkey et coupon_type.

Exemple:

SELECT 
    cellkey, coupon_type, SUM(red_qty)/SUM(households_mailed) summary 
FROM 
    (<select query you posted>) 
GROUP BY 
    cellkey, coupon_type 
+0

Je connaissais cette partie. Mon problème est que même coupon_upc est dans de nombreuses touches cell_keys. Donc faire individuellement pour chaque cellule_key fonctionne mais quand j'essaye dans cell_key dans (XX, YY) ça échouera –

0

Je pense que vous recherchez rollup/cube.

Vous pouvez ensuite l'envelopper dans une autre sélection si vous souhaitez filtrer certaines lignes de détail qui ne vous intéressent pas.

with r as 
    (select 1 red_qty , 55 cell_key , 123 coupon_upc from dual 
     union 
     select 2 red_qty , 66 cell_key , 123 coupon_upc from dual 
     union 
     select 3 red_qty , 55 cell_key , 345 coupon_upc from dual 
     union 
     select 4 red_qty , 66 cell_key , 345 coupon_upc from dual 
     union 
     select 4 red_qty , 77 cell_key , 345 coupon_upc from dual  
     union 
     select 5 red_qty , 55 cell_key , 678 coupon_upc from dual 
     union 
     select 6 red_qty , 77 cell_key , 678 coupon_upc from dual 
     union 
     select 6 red_qty , 88 cell_key , 678 coupon_upc from dual  
     ), 
     a as(
     select 'aa' coupon_type , 50 households_mailed , 123 coupon_upc from dual 
     union 
     select 'bb' coupon_type , 100 households_mailed , 345 coupon_upc from dual 
     union 
     select 'cc' coupon_type , 200 households_mailed , 678 coupon_upc from dual 
     ) 
     select (sum(r.red_qty)/ sum(a.households_mailed)) rqty_hhmailed_ratio, 
       r.cell_key, 
        a.coupon_type 
      from r 
       inner join 
       a on r.coupon_upc = a.coupon_upc 
      group by rollup (r.cell_key, a.coupon_type) 

qui se traduit par

RQTY_HHMAILED_RATIO CELL_KEY    COUPON_TYPE 
---------------------- ---------------------- ----------- 
0.02     55      aa   
0.03     55      bb   
0.025     55      cc   
0.02572857142857142857 55         
0.04     66      aa   
0.04     66      bb   
0.04     66         
0.04     77      bb   
0.03     77      cc   
0.03333333333333333333 77         
0.03     88      cc   
0.03     88         
0.031