Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/03/2011, 14h13   #1
Membre du Club
 
Didier Chaours
Inscription : juin 2002
Messages : 87
Détails du profil
Informations personnelles :
Nom : Didier Chaours
Localisation : Suisse

Informations forums :
Inscription : juin 2002
Messages : 87
Points : 41
Points : 41
Par défaut Calcul de quantité pas facile

Bonjour à tous,

Je rencontre un problème de taille avec une base de données.
Des données provenant d'une structure en arbre (hiérarchie) sont stockées dans une table.

Une quantité est liée à chaque élément de l'arbre ainsi que sur chaque noeud.
Mon but est de faire un calcul pour connaitre les quantités utiles lorsqu'un élément se trouve sous un noeud ayant une quantité > 1.

J'ai élaboré une requête qui me retourne la liste des éléments ainsi que leur parent et les quantités concernées.

Code :
1
2
3
4
SELECT p.itemnr AS parent, p.quantity AS parentqty, t.itemnr, t.quantity 
FROM tls_subbom AS p, tls_subbom AS t
WHERE (t.lft BETWEEN p.lft AND p.rgt) AND (p.sub_bom_id = 1047888024) AND (t.sub_bom_id = 1047888024) AND (t.itemid > 0)
ORDER BY t.counter, p.counter
cela me retourne ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
parent			parentqty	itemnr			quantity
C			1		1000			1
1000			1		1000			1
C			1		1110.67.010.100		3
1110.67.010.100		3		1110.67.010.100		3
C			1		0440-80.060.120S	1
A			1		0440-80.060.120S	1
0440-80.060.120S	1		0440-80.060.120S	1
C			1		2222-67.001.155		1
A			1		2222-67.001.155		1
2222-67.001.155		1		2222-67.001.155		1
C			1		1000			1
B			5		1000			1
1000			1		1000			1
C			1		1234-41-04 20-40-25	1
1234-41-04 20-40-25	1		1234-41-04 20-40-25	1
Il faudrait pouvoir multiplier les valeurs de la 2e colonne pour chaque élément de la 3e qui sont identique puis multiplier le produit par la 4e colonne.

Avez-vous une idée pour réaliser ceci en SQL ?

D'avance merci.
__________________
Delphi 7 Pro, Visual Basic, Borland C++, WinXP, Win7
chaours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 14h16   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Quelques remarques sur ta requête :
1) Les jointures s'écrivent depuis 1992 selon la norme SQL en utilisant l'opérateur JOIN !

2) Les parenthèses dans le WHERE sont inutiles puisque tu n'as que des AND.

Ta requête devrait ainsi être écrite de la sorte :
Code :
1
2
3
4
5
6
7
8
9
SELECT p.itemnr AS parent, 
    p.quantity AS parentqty, 
    t.itemnr, t.quantity 
FROM tls_subbom AS p
INNER JOIN tls_subbom AS t ON t.lft BETWEEN p.lft AND p.rgt
WHERE p.sub_bom_id = 1047888024
    AND t.sub_bom_id = 1047888024
    AND t.itemid > 0
ORDER BY t.counter, p.counter
Quant à ton besoin, le résultat attendu en fonction des données fournies nous aiderait à comprendre !
Citation:
Il faudrait pouvoir multiplier les valeurs de la 2e colonne pour chaque élément de la 3e qui sont identique puis multiplier le produit par la 4e colonne.
"les" que j'ai mis en gras est ambigü. Ces opérations sont à faire pour chaque ligne ou des regroupements de lignes
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 21h05   #3
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Je ne sais pas si j'ai vraiment compris non plus, mais faire le produit des lignes n'ai pas directement possible en SQL, il faut se rappeler de ses cours de math de lycée :
http://fr.wikipedia.org/wiki/Logarithme
http://fr.wikipedia.org/wiki/Fonction_exponentielle
Citation:
il faudrait pouvoir multiplier les valeurs de la 2e colonne pour chaque élément de la 3e qui sont identique
Donc avec t le résultat de ta précédente requête on a :
Code :
1
2
3
SELECT itemnr, exp(sum(ln(parentqty))) AS produit
  FROM t
 GROUP BY itemnr
qui donne :
Code :
1
2
3
4
5
6
7
ITEMNR                 PRODUIT
------------------- ----------
1000                         5
2222-67.001.155              1
1234-41-04 20-40-25          1
1110.67.010.100              3
0440-80.060.120S             1
Je te laisse emboiter ça dans des sous-requêtes pour obtenir le résultat souhaité.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h27.


 
 
 
 
Partenaires

Hébergement Web