2010-03-01 14 views
2

C'est une requête très facile (je pense) mais je ne peux pas le faire.Requête simple dans DB2 pour AS400

J'ai quelques données comme ceci:

A   B  C 
1  1100  5 
1  1100  5 
1   500  1 
2  1200  4 
2  1200  4 
2   600  1 
3  1300  3 
3  1300  3 
3   700  1 

Et je veux revenir en haut B par A avec la somme de C, ou quelque chose comme ceci:

A  B C 
1 1100 10 
2 1200 8 
3 1300 6 

Aussi, je m en utilisant DB2 pour AS400, donc je ne peux pas utiliser le mot clé TOP.

EDIT @ OMG Ponies:

J'essayées somethine comme

SELECT 
    t.A 
    ,MAX(t.B) 
    ,SUM(t.C) 
FROM t 
GROUP BY 
    t.A 

Mais il retourne la somme totale de C, non seulement ceux sélectionnés:

A B C 
1 1100 11 
2 1200 9 
3 1300 7 

Merci!

Répondre

4

On dirait que vous voulez que la valeur maximale B pour chaque Une valeur, donc

SELECT t.a, 
     MAX(t.b) 
    FROM TABLE t 
GROUP BY t.a 

Si vous voulez enregistrer l'ensemble associé aux valeurs A et MAX(b), utilisez:

SELECT t.a, 
     t.b, 
     t.c 
    FROM TABLE t 
    JOIN (SELECT x.a, 
       MAX(x.b) AS max_b 
      FROM TABLE x 
     GROUP BY x.a) y ON y.a = t.a 
        AND y.max_b = t.b 
+0

Merci, votre solution a fonctionné, cependant, je mais avec cela, je pouvais obtenir quelque chose d'autre à travailler, mais ce n'était pas le cas. Pouvez-vous me donner un coup de main avec ça aussi? Lire la question éditer svp. Merci =). – Carlo

+0

@Carlo: Mise à jour, je ne sais pas si c'est ce que vous recherchez. –

+0

Fonctionne comme un charme. Il fallait GROUP BY t.A, t.B à la fin cependant. Merci! Très bonne réponse. – Carlo

2

Sur DB2 peut utiliser le FETCH FIRST # ROWS ONLY pour imiter le prédicat TOP, mais il va à la FIN de l'instruction SQL