2009-07-24 9 views
0

Supposons que nous avons trois tablesGroupe et la somme des tables différentes

T1

ID |Type| Class | Points 
111|1 |a101 | 12 
111|1 |b104 | 10 
112|2 |a112 | 40 
118|1 |a245 | 30 
186|2 |c582 | 23 

T2 (données pour le type = 1 uniquement)

ID |Type|EPoints 
111|1 |4 
118|1 |3 

T3 (Données pour Type = 2 uniquement)

ID |Type|EPoints 
112|2 |9 
186|2 |15 

Et nous voulons avoir une vue qui montrera ID, Type, somme (Points) + EPoints par exemple

ID |Type| Points 
111|1 | 26 
112|2 | 49 
118|1 | 33 
186|2 | 38 

Comment puis-je faire cela?

+0

Ça sent le devoir. – Petrogad

+0

Je souhaite que c'était l'homme, je souhaite qu'il était ... –

Répondre

0
select dt.id 
    , dt.type 
    , dt.points + coalesce(t2.epoints, t3.epoints) as points 
    from (select t1.id 
      , t1.type 
      , sum(t1.points) as points 
      from t1 
     group 
      by t1.id) as dt 
left outer 
    join t2 
    on t2.type = dt.type 
left outer 
    join t3 
    on t3.type = dt.type 
+0

total côté - qu'est-ce que vous utilisez pour formater votre SQL comme ça? par la main? – seth

+0

ya, je le fais à la main, malheureusement. J'aimerais avoir quelque chose le faire automatiquement mais je ne sais même pas par où commencer. – longneck

0

On dirait que cela pourrait fonctionner (la jointure peut avoir besoin d'être de gauche - avec un COALESCE autour EPoints pour transformer en zéros nulls - si vous devez prendre des précautions sur les dossiers dans t1 sans enregistrement correspondant dans l'une ou l'autre des tables, bien sûr).

SELECT t1.ID, t1.Type, SUM(t1.Points) + other.Epoints 
FROM t1 
JOIN (
    t2 
    UNION 
    t3 
) other ON (other.Type = t1.Type) 
GROUP BY t1.ID 
Questions connexes