2010-05-07 9 views
1

Je dois combiner les résultats de deux requêtes de sélection provenant de deux tables de vue, à partir desquelles j'effectue des calculs. Peut-être qu'il existe un moyen plus facile d'effectuer une requête en utilisant if ... else - des pointeurs?combinant deux instructions select pour renvoyer un résultat

Essentiellement, je besoin de diviser tout par 'ar.time_ratio' sous la condition dans la requête sql 1 et ignorer que pour la requête 2.

SELECT 
gs.traffic_date, 
gs.domain_group, 
gs.clicks/ar.time_ratio as 'Scaled_clicks', 
gs.visitors/ar.time_ratio as 'scaled_visitors', 
gs.revenue/ar.time_ratio as 'scaled_revenue', 
(gs.revenue/gs.clicks)/ar.time_ratio as 'scaled_average_cpc', 
(gs.clicks)/(gs.visitors)/ar.time_ratio as 'scaled_ctr', 
gs.average_rpm/ar.time_ratio as 'scaled_rpm', 
(((gs.revenue)/(gs.visitors))/ar.time_ratio)*1000 as "Ecpm" 
FROM 
group_stats gs, 
v_active_ratio ar 

WHERE ar.group_id=gs.domain_group 

et

SELECT 
gs.traffic_date, 
gs.domain_group, 
gs.clicks, 
gs.visitors, 
gs.revenue, 
(gs.revenue/gs.clicks) as 'average_cpc', 
(gs.clicks)/(gs.visitors) as 'average_ctr', 
gs.average_rpm, 
((gs.revenue)/(gs.visitors))*1000 as "Ecpm" 
FROM 
group_stats gs, 
v_active_ratio ar 

where not ar.group_id=gs.domain_group 

Répondre

3

qui est généralement ce que UNION [ALL] est pour.

0

Le UNION suggéré ci-dessus vous donnera tous les résultats mis à l'échelle, et toutes les données non-mise à l'échelle (la deuxième requête) sous forme de lignes séparées.

Si vous voulez regrouper leurs données communes, de sorte que vous avez l'échelle et du côté des données normales côte à côte sur la même ligne, vous pouvez utiliser une requête comme ceci:

SELECT * FROM ([first-query]) AS scaled 
    INNER JOIN ([second-query]) AS normal 
    ON scaled.traffic_date=normal.traffic_date 
     AND scaled.domain_group=normal.domain_group 

Au lieu d'utiliser * pour sélectionner toutes les colonnes, vous pouvez déclarer explicitement les colonnes sélectionnées, car les colonnes traffice_date et domain_group seront générées deux fois.

Questions connexes