SQL-Porquoi c'est faux?

Résolu/Fermé
natrop Messages postés 6 Date d'inscription jeudi 25 janvier 2007 Statut Membre Dernière intervention 4 février 2007 - 25 janv. 2007 à 14:13
natrop Messages postés 6 Date d'inscription jeudi 25 janvier 2007 Statut Membre Dernière intervention 4 février 2007 - 4 févr. 2007 à 15:32
Bonjour,
Est-ce que vous pourriez me dire pourquoi c'est faux conceptuellement (meme si ça marche très bien) et quelle est la solution? merci

La table Composants contient les champs Comp_Cod, Comp_Cout
La table CompArt les champs Comp_Cod,Art_Cod et CompArt_Qt
La table Articles Art_Cod, Art_Prix,Art_TVA, Art_Frais_Envoi
La table ComArt Art_Cod,Com_Cod et ComArt_Qt

Le but est d'arriver à:
Recette Commandes | Cout Commandes | Bénéfice commandes
-------------------------------------------------------------------------
"montant" | "montant" | "montant"

SELECT SUM(ComArt_Qt*(Art_Prix*(1+Art_TVA/100)+Art_Frais_Envoi)) "Recette Commandes", SUM(ComArt_Qt*(SUM(CompArt_Qt*Comp_Cout))) "Cout Commandes", SUM(ComArt_Qt*(Art_Prix*(1+Art_TVA/100)+Art_Frais_Envoi))-SUM(ComArt_Qt*(SUM(CompArt_Qt*Comp_Cout))) "Bénéfice Commandes"
FROM Composants
INNER JOIN CompArt USING (Comp_Cod)
INNER JOIN Articles USING (Art_Cod)
INNER JOIN ComArt USING (Art_Cod)
GROUP BY ComArt_Qt, Art_Prix, Art_TVA, Art_Frai_Envoi;
A voir également:

4 réponses

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
25 janv. 2007 à 14:33
SUM(ComArt_Qt*(Art_Prix*(1+Art_TVA/100)+Art_Frais_Envoi)) "Recette Commandes", 


doit devenir :
SUM(ComArt_Qt*(Art_Prix*(1+Art_TVA/100)+Art_Frais_Envoi)) AS "Recette Commandes", 


Il me semble.

Sinon je n'ai pas trop compris, cette requete fonctionne dans ton programme mais tu voudrais savoir si conceptuellement c'est correct, c'est ca ?
Ou si la base de données fonctionne, mais la requête non.

0
natrop Messages postés 6 Date d'inscription jeudi 25 janvier 2007 Statut Membre Dernière intervention 4 février 2007
25 janv. 2007 à 14:46
merci de ton intéret

Le AS n'est pas un pb, ça marche quand meme.
Le pb c'est que j'ai fait cet exercice en cours et il fonctionne très bien, mais le prof m'a dit que c'était faux, sans pouvoir m'expliquer pourquoi. Je n'arrive pas à comprendre comment le faire juste, vu que ma logique a été celle-là, alors j'aimerais que l'on m'explique pourquoi le programme est faux, bien qu'il marche et quelle serait la solution, merci.
0
blux Messages postés 26494 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 28 novembre 2024 3 317
25 janv. 2007 à 14:52
Salut,

si le prof te dit que c'est faux, mais n'est pas en mesure de dire pourquoi, je ne saurais trop te recommander de changer d'école !!!

Ou alors le prof n'en est pas un, et il fait du 'par coeur'...
0
natrop Messages postés 6 Date d'inscription jeudi 25 janvier 2007 Statut Membre Dernière intervention 4 février 2007
25 janv. 2007 à 14:57
Je lui laisse jusqu'au prochain cours pour etudier la question et me trouver une explication. En attendant, j'aimerais que qqun puisse éclairer ma lanterne.

Apparemment, le fait du faire un GROUP BY sur ces champs-là est un pb et aussi de mettre un SUM d'un SUM dans le SELECT.

aiutoooooooooo
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
25 janv. 2007 à 15:17
En fait oui j'avais pas vraiment vu l'ensemble de ta requete, mais ton prof a raison dans le sens ou il veut dire que ce n'est pas une maniere tres propres de le faire... même si ca fonctionne.

Pour les SUM de SUM, j'imagine que ton prof pense plutot à faire des sous requètes. Et il te donnera certainement la réponse la semaine prochaine.

Pour ma part c'est déjà tellement loin que je saurais même plus expliquer ca ^^ ni même en faire proprement alors je vais m'abstenir :p

Bon courage.
0
natrop Messages postés 6 Date d'inscription jeudi 25 janvier 2007 Statut Membre Dernière intervention 4 février 2007
25 janv. 2007 à 15:22
ok
merci de m'avoir quand meme répondu.

si qqun veut me donner la solution "propre"....

en attendant, je cherche....
0
natrop Messages postés 6 Date d'inscription jeudi 25 janvier 2007 Statut Membre Dernière intervention 4 février 2007
29 janv. 2007 à 18:32
personne veut m'aider ?
0
slt,
perso j'aurais écrit la même chose, ça me parait très logique et en plus si ça marche que demander de plus ????

je suis d'accord avec d'autres, si ton prof ne sait pas expliquer ce qu'il veut que tu écrives .... y a un problème .... un prof doit être capable d'expliquer sa théorie qu'il enseigne !!!!
s'il propose une autre solution .... elle sera à mon avis plus longue.
j'aimerai la connaitre, rien que pour réviser moi même mon savoir !!!
a+
0
natrop Messages postés 6 Date d'inscription jeudi 25 janvier 2007 Statut Membre Dernière intervention 4 février 2007
4 févr. 2007 à 15:32
salut,

merci de ton soutien. j'en ai donc discuté avec le prof qui m'a répondu que oui c'est juste mais par principe, dans une base de données, on ne peut pas créer un champ calculé à partir d'autres champs calculés (cf calcul de "Bénéfice Commandes" ). donc la réponse est qu'il faut obligatoirement passer par 2 sous-requetes pour arriver au résultat du bénéfice.



CREATE TABLE Calculs
( Recette NUMBER(10,2),
Cout NUMBER(10,2)
);

INSERT INTO Calculs
VALUES (( SELECT SUM(ComArt_Qt*(Art_Prix*(1+Art_TVA/100)+Art_Frais_Envoi)) "Recette Commandes"
FROM Magasins
INNER JOIN Commandes USING (Mag_Cod)
INNER JOIN ComArt USING (Com_Cod)
INNER JOIN Articles USING (Art_Cod)
),
( SELECT SUM(Com_Cout*CompArt_Qt*ComArt_Qt) "Cout Commandes"
FROM Composants
INNER JOIN CompArt USING (Comp_Cod)
INNER JOIN Articles USING (Art_Cod)
INNER JOIN ComArt USING (Art_Cod));

SELECT Recette-Cout "Bénéfice"
FROM Calculs;

Et voilà !
merci
0