Bonjour à tous
Petite précision tout d’abord. Bien que mon post ait l’apparence d’un exercice de TD, ce n’est pas le cas. Il ne s’agit pas de «faites mon devoir à ma place». Simplement afin de ne pas mettre en ligne d’informations professionnelles, j’ai quelque peu transformé les éléments de mon problème de travail.
Par ailleurs, je suis assez novice, alors pardonnez moi si j’ai une mauvaise façon de raisonner.
Sous SQL Server, j’ai deux tables T1 et T2,chacune ayant plusieurs colonnes mais seules indiquées concernent le problème.
T1(Caisse,…,clé primaire reliant T1 et T2,soit C1)
T2(Outils….,C1)
Je cherche à trouver combien il y a de chaque outil par caisse.
J’ai tenté la requête suivante:
La requête me retourne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 select Caisse "n° de caisse", count(case when outil='marteau' then 1 else 0 end) as nbmarteaux, count(case when outil='pince' then 1 else 0 end) as nbpinces, count(case when outil='tournevis' then 1 else 0 end) as nbtournevis, count(case when outil='rabot' then 1 else 0 end) asnbrabots, count(case when outil='scie' then 1 else 0 end) asnbscies, count(case when outil='perceuse' then 1 else 0 end) as nbperceuses, from T1 a,T2 b where a.C1=b.C1 group by Caisse order by Caisse
Le problème est d’une part que les résultats retournés sont tous identiques sur chaque ligne. Ainsi, pour la caisse n°1,j’ai 13 marteaux, 13 pinces, 13 tournevis..alors que ce n’est pas le cas bien sûr. D’autre part, 13 ou 34 dans cet exemple fictif correspond au nombre total d’outils dans chaque caisse: par exemple 2 marteaux+4 pinces+1 tournevis+…..=13 outils dans la caisse 1 alors que je voudrais justement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 N° de caisse nbmarteaux nbprinces .. 1 13 13 2 34 34 3 26 26 ..
C’est comme si j’utilisais la requête suivante pour la caisse n°1:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 N° de caisse nbmarteaux nbprinces .. 1 2 4 . 2 8 6 3 5 4 .. ..
J’ai fait divers tests afin de vérifier si ma requête a un sens. Ainsi, j’ai remplacé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select count (*) as nboutils,Caisse n° de caisse from T2 where Caisse='1' group by Caisse
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part count(case when outil='marteau' then 1 else 0 end) as nbmarteaux,
mais sans conséquences sur la requête qui me retourne la même chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part count(case when outil='marteau' then 2 else 0 end) as nbmarteaux,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 select Caisse, count(*) as nbmarteaux, count(*) as nbpinces, .. from T1 C1,T2 C1 where c.C1=d.C1 group by Caisse
A noter que si je remplace count par sum, j'obtiens là aussi des résultats curieux quasiment tous nuls et en outre ma colonne outils est de type varchar comme la colonne Caisse. Alors, je me demande ce que "peut calculer la requête". A priori sum ne peut s'appliquer à une colonne de type de varchar.
Pour résumer,je ne sais pas comment compter le nombre de champs(marteau,pince..).
Merci et en espérant avoir été assez clair.
Partager