Posez votre question Signaler

[SQL] Somme des champs d'un enregistrement [Résolu]

Laaris 134Messages postés 1 avril 2008Date d'inscription 17 juin 2011Dernière intervention - Dernière réponse le 26 sept. 2011 à 09:34
Bonjour,
Je travaille sous Access 97. J'ai plusieurs tables dans ce style:
Clé   Attr1
 1       2
 2       1
 3       1


Clé   Attr2
 2       1
 3       2


Clé   Attr3
 1       1
 3       1

A l'aide de jointures externes j'obtiens:
Clé   Attr1   Attr2   Attr3
 1       2                 1
 2       1        1
 3       1        2        1

Je voudrais maintenant ajouter un quatrième attribut qui serait la somme des attributs attr1, attr2, attr3. Ce qui donnerait:
Clé   Attr1   Attr2   Attr3   Somme
 1       2                 1      3
 2       1        1               2
 3       1        2        1      3

Sauf que je n'y arrive pas, j'ai essayé en faisant (Attr1+Attr2+Attr3) as Somme. Je ne pense pas que SUM soit utilisable dans ce cas là (d'ailleurs j'ai essayé et ça marche pas). La requête renvoie une table où l'attribut somme est présent mais toujours NULL.
Quelqu'un pour m'aider?
Merci d'avance.
Lire la suite 

[SQL] Somme des champs d'un enregistrement »

13 réponses
Réponse
+5
moins plus
J'ai résolu mon problème.

En utilisant la fonction Nz(attr,0) dans ma requête, j'ai transformé les NULL en zéros et l'addition se fait sans problème.
cchristian- 30 avril 2008 à 12:20
Bonjour,

OK, tant mieux ! Bon courage
Acrstfl - 7 sept. 2009 à 12:10
Face au même problème que Laaris mais en utilisant une base Oracle je viens de tomber sur ce post un an après.
Au cas où quelqu'un ait le même problème voici la solution pour une base oracle :
Utiliser la fonction nvl(champA,0) pour arriver à remplacer les null par un zéro dans le champ champA.
Ajouter un commentaire
Réponse
+0
moins plus
Visiblement, ma syntaxe est bonne mais la requête renvoie NULL pour chaque ligne parce que chaque ligne a au moins un attribut NULL.

Comment faire pour qu'ils considère les attributs NULL comme égaux à zéro et effectue l'addition?
Ajouter un commentaire
Réponse
+0
moins plus
Up, désolé je n'aime pas faire de la remontée de topic comme ça, mais je ne trouve vraiment pas de solution à mon problème.

Merci de votre compréhension et de votre future aide. ^^
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

Je ne sais pas si je pourrais t'aider car je ne connais pas ACCESS, mais je pense que tu ne donnes pas suffisamment d'indications, par exemple :

- ta ou tes requêtes SQL, (la trame au moins)
- le type et les caractéristiques des colonnes à additionner, (si possible les CREATE des tables)
- pourquoi la fonction colonne SUM ne fonctionne pas, car, à priori si les colonnes sont décrites numériques il n'y a pas de raison pour que ça ne fonctionne pas.
- ......................
Laaris- 30 avril 2008 à 08:46
Merci pour ta réponse.

Ma requête est du style
SELECT clé, Attr1, Attr2, Attr3, (Attr1+Attr2+Attr3) AS Somme

FROM (table_1 LEFT JOIN table_2 ON table_1.clé=table_2.clé) LEFT JOIN table_3 ON table_1.clé=table_3.clé;


Les colonnes à additionner sont de type entier mais à cause de la jointure externe elles peuvent contenir un NULL (et c'est là qu'est le problème à mon avis).

SUM ne fonctionne pas parce qu'il permet seulement de faire la somme d'attributs en colonnes, par exemple si je voulais la somme de Attr1 pour tous les enregistrements, je ferai SUM(Attr1). Là ce n'est pas le cas, je veux la somme des différents arguments d'une même ligne.
amitaf006- 15 juin 2010 à 14:20
Bonjour Laaris,
J ai le même problème , je voudrais savoir si tu as trouvé un solution pour faire la somme.

Merci d'avance.
Ajouter un commentaire
Réponse
+0
moins plus
Salut, j'ai une table "tags" dans ma base de données avec 3 colonnes: "id, tag, count", je voudrais additionner (regrouper) les "tag" identiques (chacun des tag ayant un count = 1)

ma table "tags"
id tag count
1 pomade 1
2 bas 1
3 pomade 1
4 pomade 1
5 bas 1
6 sol 1
7 sol 1
8 bas 1

resultat voulu:
id tag count
1 pomade 3
2 bas 3
3 sol 2

merci
Laaris- 18 juin 2008 à 15:25
select tag, sum(count)
from tags
group by tag;
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour, j'ai voulu faire un update de ma table "tags" en faisant la somme des tag similaires mais j'ai le message :

Ma requette est la suivante:
UPDATE tags
SET count = (select sum (count))
FROM tags where tag = tag
group by tag

MySQL a répondu:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM tags where tag = tag
group by tag' at line 3
MFBS - 25 sept. 2011 à 23:18
bonjour svp personne me dite ou est la faute
la SUM ne travaille pas

$sql = 'SELECT ann,SUM(nbr) FROM cong GROUP BY ann';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on recupere le resultat sous forme dun tableau
$data= mysql_num_rows($req);
if ($data)
{ echo '<table bgcolor="#FFFFFF">'."\n";
// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '<tr>';
echo '<td bgcolor="#669999"><b><u> Année: </u></b></td>';
echo '<td bgcolor="#669999"><b><u>Nbr jour total</u></b></td>';
echo '</tr>'."\n";

while($row = mysql_fetch_array($req)) {
echo '<tr>';
echo '<td bgcolor="#CCCCCC">'.$row['ann'].'</td>';
echo '<td bgcolor="#CCCCCC">'.$row['nbr'].'</td>';
echo '</tr>'."\n";
}
echo '</table>'."\n";
// fin du tableau.

}
else echo 'Pas d\'enregistrements dans cette table...';

mysql_free_result($req);
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,
Normal car il faut spécifier dans ta requête sur quelle colonne de la table elle doit faire l'opération (en gras dans le code ci-dessous) :
$sql = 'SELECT ann,SUM(nbr) as nom_colonne FROM cong GROUP BY ann';

D'autre part, pas la peine de passer par une variable intermédiaire (si tu n'en as pas besoin plus loin dans ton script) pour tester ta condition :
$data= mysql_num_rows($req); 
if ($data) {

A remplacer par :
if(mysql_num_rows($req) != 0) {
     // Suite de ton code...
Ajouter un commentaire
Ce document intitulé « [SQL] Somme des champs d'un enregistrement » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?