begin process at 2013 05 26 10:17:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

FireBird

 > 

Requêtes

 > 

FIREBIRD - Problème LEFT JOIN


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

FIREBIRD - Problème LEFT JOIN

jeudi 7 mars 2013 à 17:40:08 | FIREBIRD - Problème LEFT JOIN

simonpelloquin

Membre Club

Bonjour,

Pour situer le problème, j'ai deux tables :
STOCKS (NUM_STK, NUM_PROD, QTE)
ETATS (NUM_STK, NUM_ETAT, NUM_PROD, QTE)

STOCKS est un état du stock en temps réel. Le stock peut être réparti sur plusieurs lieux de stockage (NUM_STK)
ETATS permet de conserver un état du stock à un moment donné.

Dans STOCKS, j'ai plusieurs produits sur 6 sites (un même produit peut être présent sur plusieurs sites). J'enregistre mon état. J'ai bien mes 6 sites et tous mes produits par site.
Je veux contrôler, suite à l'enregistrement d'un état, que les 6 sites de stockage du stock actuel sont bien dans l'état. Pour les besoins du test, j'efface donc dans l'état enregistré le site 3.

J'ai essayé cette requête (essai sur l'état n°2):
Select distinct t1.NUM_STK, Count(distinct t1.NUM_STK) as C1, Count(distinct t2.NUM_STK) as C2
From STOCKS t1
LEFT JOIN (ou LEFT OUTER) ETATS t2 on t1.NUM_STK = t2.NUM_STK
Where t2.NUM_ETAT = 2
Group by t1.NUMSTK

En retour, j'ai :
NUM_STK | C1 | C2
1 1 1
2 1 1
4 1 1
5 1 1
6 1 1

Pas de site 3 !!! Je m'attendais à avoir une ligne 3, 1, 0

Je fais donc cette requête :
Select distinct t1.NUM_STK, Count(distinct t1.NUM_STK),
(Select Count(distinct t2.NUM_STK)
From ETATS t2
Where t1.NUM_STK = t2.NUM_STK
and t2.NUM_ETAT = 2)
From Stocks t1
Group by t1.NUM_STK

En retour, j'ai le résultat souhaité :
NUM_STK | C1 | C2
1 1 1
2 1 1
3 1 0
4 1 1
5 1 1
6 1 1

Je voudrais juste comprendre pourquoi le left join ne marche pas...


Simon
jeudi 7 mars 2013 à 21:02:44 | Re : FIREBIRD - Problème LEFT JOIN

yann_lo_san

Salut,

il me semble que la valeur NULL dans un count() fait perdre la ligne complète
(la valeur d'agrégation ne peut pas etre nulle ou un message du genre)
car sinon, c'est comme si tu faisait : Count(distinct NULL)

dans ta première requete, peut etre qu'un :
Code :
select distinct 
    t1.NUM_STK, 
    Count(distinct t1.NUM_STK) as C1,
    C2  = Count(distinct isnull(t2.NUM_STK,0)) /*<----- ICI*/
from /*...*/

permettrait de réparer, a voir.

bye...
vendredi 8 mars 2013 à 10:32:19 | Re : FIREBIRD - Problème LEFT JOIN

simonpelloquin

Membre Club

Merci yann_lo_san,
malheureusement, c'est sans effet...
J'ai essayé avec nullif et coalesce...

Simon


Cette discussion est classée dans : t1, t2, num, état, stk


Répondre à ce message

Sujets en rapport avec ce message

requete sql [ par benjah ] Bonjour a tous,J'ai un problème pour pondre une requete sql. Voici mon probleme:J'ai deux tables : t1 et t2pour une donnée t1 est associée [0,n] donné probleme de comparaison de table [ par ehmarc ] SalutJe suis sous MySQL voici ma requetejai deux table t1 et t2 qui ont en gros une soixantaine d'entrer chacunneje veut faire ressortir les champ qui Optimisation d'une requête de mise à jour [ par josserand ] Bonjour, J'ai besoin de créer des requêtes de mises à jour, appelant une sous-requête. Du genre :Code :</d requete jointure conditionnelle [ par floxone ] Salut, J'ai besoin de faire une requête de ce genre s'il vous plaît : SELECT SUM (v1 * (t2.v2+t2.v3+t3.v4) / v5)FROM table1 t1, table2 t2WHERE t1. Resultat incompréhensible [ par JALEO WAHRANI ] Bonjour, j'ai une base avec 2 tables: 'perso et client', perso a pour colonnes:id, prop, etatétat vaut 'Y' si on effectue un suivi, sinon (par défaut) Défit pour un pro [ par zazadec ] Question de se compliquer la vie, je dois reprendre un site avec une bdd déjà existante... bref vous avez compris j'ai pas le choix.2 tables T1 et T2 Optimisation requete [ par citt ] Bonjour,Je suis en train d'optimiser des requêtes et je me demande qu'elle manière et la plus rapide.Voici ma table Requete et jointure [ par jobijobar ] Re-,bon dans un précédent post j'avais partagé avec vous mon horrible requête, pour ceux qui n'ont pas eu le grand malheur de la voir, c'était :SELECT JOINTURE A UTILISER POUR UN INSERT INTO [ par guivrator ] Bonjour,J'ai crée une base de données dans laquelle j'ai un premier tableau T1 contenant environ 25 champs donc une clé primaire ID. Pour remplir ce t Supprimer des doublons dans SQL serveur [ par henri38 ] Bonjour à tous,J'ai utiliser une source trouvée dans ce site mais je n'arrive pas à la faire marcher.Je cherche à deleter des doublons dans ma baseLa


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales