SQL tri calcul sur 2 tables

SQL tri calcul sur 2 tables - SQL/NoSQL - Programmation

Marsh Posté le 08-04-2011 à 14:34:36    

Bonjour,
 
Je recherche une requete sql pouvant trier et calculer sur 2 tables
 
table A:
Compte --> text
ref --> Text  
qt --> int
Prix --> float
 
table B
ref --> Text
 
Et je voudrais calculer est récupéré les données de la table A  
1 trier par compte
 
2 calculer les qt total mais la est le pb car j'ai besoin de 2 chiffres différent  
a) si tbaleA.ref est présent dans la tableB. ref alors on calcule la qt est récupère vers Bqt
b) sinon on calcule est on récupère ver Aqt
 
3) calculer le prix total par rapport à la quantité
a) si tbaleA.ref est present dans la table B. ref alors on calcule la qte est récupère vers Bprix
b) sinon on calcule est on récupère ver Aprix
 
Donc j'aurai comme tableau :
compte - Aqt - Bqt - Aprix - Bprix
 
Donc j'ai vue avec des CASE ou JOIN mais pas evident donc si quelqu'un pouvais juste m'expliquai comment faire...
 
Voila j’espère avoir été claire pas évident à expliquer !!!
 
Merci d'avance

Reply

Marsh Posté le 08-04-2011 à 14:34:36   

Reply

Marsh Posté le 08-04-2011 à 14:45:21    

Non, t'es pas clair du tout :/ En +, tu sembles ne pas nous donner le bon contenu de la table B car dans en début de ton post, on a l'impression qu'il n'y a qu'un champ dedans, alors que par la suite, tu parles d'autres champs. Merci aussi de nous par quelle relations ces 2 tables sont liées entre elles...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-04-2011 à 15:06:05    

Dans la Table B j'ai besoin que de Ref le reste ne m'es pas utile
 
donc Table B
Ref--> text
Designation--> text
 
le 2 tables son liée pour Ref justement
 
En faite ce que je veux faire c'est 2 calcul bien différents entre table A et B
un test qui va vérifier tablA.ref qui est présent dans la tableB.ref
si c'est le cas j'ai plusieurs calcul :  
SUM(tableA.qt*tableA.prix) As TPixA
SUM(tableA.qt) As TqtA
 
si jamais ma ref n'est pas trouver on a 2 autres calcul
SUM(tableA.qt*tableA.prix) As TPixB
SUM(tableA.qt) As TqtB
 
Après j'ai un tri par compte et le résulta devrai me donner ceci par exemple
 
Compte  -  TqtA  -  TPixA  -  TqtB   -   TqtB
xy             1500     2500      250        500
xx              1450     2500      300        350
 
J'arrive sans souci à faire le tri de ma table A avec le calcul des qt et prix
Mais la je veux faire les calculs par rapport au ref présent dans la tableB c'est pour faire des states.
 
voila et je suis sous MySql

Reply

Marsh Posté le 08-04-2011 à 15:21:10    

Ben déjà, la mise en page que tu proposes ne pourra pas se faire avec juste du SQL à mon avis :/
Ensuite, si ton besoin est juste de savoir si la réf est présente dans la table B, suffit de rajouter le champ désignation et faire un LEFT JOIN entre table A et table B. La désignation vaudra NULL si la réf de la table A n'est pas présente dans B...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-04-2011 à 15:34:16    

Ca devrait marcher

Code :
  1. SELECT Compte, SUM(QtA), SUM(PrixA), SUM(QtB), SUM(PrixB) FROM
  2. ( SELECT
  3. A.Compte, IF(B.ref,NULL,A.qt) AS QtA, IF(B.ref,NULL,A.qt * A.prix) AS PrixA
  4. FROM A, IF(B.ref,A.qt,NULL) AS QtB, IF(B.ref,A.qt * A.prix,NULL) AS PrixB
  5. LEFT JOIN B ON B.ref = A.ref
  6. ) GROUP BY Compte


 
Rassure moi, quand tu parles de champ text, c'est pas vraiment des champs de type text, si ?

Reply

Marsh Posté le 08-04-2011 à 15:38:23    

Si malheureusement j'ai pas trop le choix car une ref peut être numérique ou alpha ou alphanumérique.
 

Reply

Marsh Posté le 08-04-2011 à 15:38:57    

merci pour ta réponse je vais tester ça de suite :)

Reply

Marsh Posté le 08-04-2011 à 16:06:15    

Jiibax a écrit :

Si malheureusement j'ai pas trop le choix car une ref peut être numérique ou alpha ou alphanumérique.


Dans ce cas, utilise une clé numérique non signifiante, ou au moins un type char plutôt que text ... j'ose pas imaginer les indexs ...

Reply

Marsh Posté le 11-04-2011 à 10:19:29    

C'est clair :/ Vaut mieux avoir une clé primaire de type integer. C'est bien plus efficace en terme de perfs (pour les jointures) et en terme de stockage (moins de place).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 11-04-2011 à 15:26:21    

Merci pour la requête qui m'a bien aider :) J'ai du un peu la modifier pour certaines raison et pour ireport car j'obtenu pas le resulta voulu :) Maintenant c'est ok !! merci
Par contre c'est une table qui restera fixe et qui auras au grand max 150 enregistrements.
Désoler je débute en sql.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed