Valeur à 0

Fermé
domi6226 Messages postés 79 Date d'inscription jeudi 12 juillet 2012 Statut Membre Dernière intervention 5 juin 2018 - 5 sept. 2012 à 11:53
 A.Nonymous - 11 sept. 2012 à 20:11
Bonjour,

J'ai plusieurs produits, j'ai créé un état qui reprends tous les mouvements avec un regroupement par mois

Certains ne mouvementent pas et donc le mois sans mouvement n'apparaît pas, est-il possible de faire faire ressortir ce mois l'état même s'il n'y a pas de mouvements.

Merci de votre aide.

1 réponse

Dans un cas où des données liées peuvent exister ou ne pas exister, il faut utiliser une jointure "LEFT"
SELECT
produit.*, COUNT(DISTINCT mouvement.id) nb_mouvements
FROM prodiut
LEFT JOIN mouvement ON mouvement.id_produit = produit.id
GROUP BY produit.id

(Ca pourrait être avec RIGHT aussi, mais tout SQL utilisant RIGHT peut être converti en SQL utilisant LEFT)
0
domi6226 Messages postés 79 Date d'inscription jeudi 12 juillet 2012 Statut Membre Dernière intervention 5 juin 2018
5 sept. 2012 à 15:25
Je n'y connais pas grand chose en SQL, mon état part d'une requête union qui regroupe l'ensemble des produits, ou dois-je mettre la solution que vous proposez ? Dans cette requête union ?

Merci de votre aide.
0
Un UNION ? Les produits sont stockés dans plusieurs tables ? :/ Il doit y avoir une bonne raison.

Mais dans ce cas, il va falloir donner + d'infos sur les tables en question et les liens entre elles.
S'il y a plusieurs tables de produit, à quel(s) élément(s) d'un produit un mouvement est-il associé ?
0
domi6226 Messages postés 79 Date d'inscription jeudi 12 juillet 2012 Statut Membre Dernière intervention 5 juin 2018
5 sept. 2012 à 22:57
j'ai créé deux tables par produits (qui ont des caractéristiques différentes, c'est du matériel pour un sport loisir) une Ref et une Mvts.

Il y a des entrées et des sorties sur chacun des produits, donc afin de regrouper les entrées et sorties de chaque produit, j'ai créé une requête Union pour chaque produit.

Afin de suivre l'évolution des entrées et sorties, et bien sur des stocks, j'ai crée une super requêtes (grâce à ce site) me permettant de regrouper l'ensemble sur un seul état (en modifiant les requêtes pour qu'elles aient le même nombre de colonnes).

Mais les mois ou certains ne mouvementent pas (je m'arrête au mois pour l'instant) ne figure pas sur cet état, pas de valeur à 0 comme sous Excel, donc je cherche un moyen de faire apparaître ces mois sans mouvements dans cet état.

J'espère être assez clair dans cette explication.

Merci.
0
Grossièrement, je dirais :
SELECT
produit.*, COUNT(DISTINCT mouvement.id) nb_mouvements
FROM (
SELECT id, nom, 'A' type FROM produitA
UNION
SELECT id, nom 'B' type FROM produitB
) prodiut
LEFT JOIN mouvement ON mouvement.id_produit = produit.id AND mouvement.produit_type = produit.type
GROUP BY produit.type, produit.id
0
domi6226 Messages postés 79 Date d'inscription jeudi 12 juillet 2012 Statut Membre Dernière intervention 5 juin 2018
6 sept. 2012 à 16:43
Merci de ta réponse, petites question

donc ;

SELECT
produit.*, COUNT(DISTINCT mouvement.id) nb_mouvements
FROM (
SELECT id, nom=nom de la table, 'A'=nom du produit type FROM produitA
UNION
SELECT id, nom 'B' type FROM produitB
) prodiut
LEFT JOIN mouvement ON mouvement.id_produit = produit.id AND mouvement.produit_type = produit.type
GROUP BY produit.type, produit.id

Désolé, j'avoue mon ignorance la dessus.
0