Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 16/04/2008, 14h50   #1
Futur Membre du Club
 
Inscription : octobre 2007
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 63
Points : 15
Points : 15
Par défaut Problème de requête

Bonjour à tous !

Désolé le titre n'est pas très explicite mais je ne voyais pas comment dire autrement.
Voilà j'ai un petit souci sur lequel je galère depuis 2 jours sur une requete.

Voici la requete de base et son résultat :

Citation:
Code :
1
2
3
4
5
SELECT cd_batch, dttm_stock_mvt,  cd_mvt_type,  cd_warehouse
FROM  stock_mouvemt
WHERE cd_register = 'M210-0175' --Numéro de l'article
AND (( cd_warehouse='SERIN' AND CD_MVT_TYPE LIKE 'E%')
OR  ( cd_warehouse='SEROUT' AND CD_MVT_TYPE LIKE 'S%') )
N°MVT________DT_____TYPE-MVT_____MAG
10497______13/02/07______E2________SERIN
11949______02/03/07______S5________SEROUT
41073______17/03/08______E2________SERIN
42098______04/04/08______S5________SEROUT
Explication : Il s'agit du mouvement d'un article dans un stock: son entrée (SERIN) et la date correspondante, sa sortie(SEROUT) et la date correspondante, et son numéro de mouvement. On peut laisser de coté le TYPE-MVT.

Donc là on voit que pour l'article concerné il est entré le 13/02/07 et est sorti le 02/03/07 et est entré à nouveau le17/03/08 pour sortir le 04/04/08.

Le probleme que j'ai est que je souhaiterai que pour l'article soit affiché sur la même ligne son entrée et sa sortie du type:

Citation:
13/02/07_____SERIN______02/03/07____SEROUT
17/03/08_____SERIN______04/04/08____SEROUT
Et là c'est le drame...

Donc si quelqu'un veux bien m'éclairé. merci
oOBaalberithOo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2008, 15h35   #2
Membre du Club
 
Inscription : décembre 2006
Messages : 119
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 119
Points : 61
Points : 61
Bonjour,

Je pense qu'il faut faire une jointure entre la table et elle-même, du genre

Citation:
SELECT I.cd_batch, I.dttm_stock_mvt, I.cd_warehouse,
min(O.dttm_stock_mvt), O.cd_warehouse,
FROM stock_mouvemt I, stock_mouvemt O
WHERE cd_register = 'M210-0175' --Numéro de l'article
AND I.cd_warehouse='SERIN'
AND O.cd_warehouse='SEROUT'
AND I.cd_batch = O.cd_batch
AND O.dttm_stock_mvt > I.dttm_stock_mvt
group by I.cd_batch, I.dttm_stock_mvt, I.cd_warehouse,
O.dttm_stock_mvt
Le min, le > et le group by servent à prendre uniquement la date de sortie correspondant à la date d'entrée.
__________________
La différence entre la théorie et la pratique, c'est qu'en théorie il n'y a pas de différence entre la théorie et la pratique. En pratique, si.
pat29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2008, 16h00   #3
Futur Membre du Club
 
Inscription : octobre 2007
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 63
Points : 15
Points : 15
PARFAIT ! Je te remercie !

voilà la requete au final :
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT s1.dttm_stock_mvt entree, s1.cd_warehouse, min(s2.dttm_stock_mvt), s2.cd_warehouse
FROM stock_mouvemt s1, stock_mouvemt s2
WHERE s1.cd_register = 'M210-0175'
  AND s1.cd_warehouse='SERIN'
  AND s1.cd_mvt_type LIKE 'E%'
  AND s2.cd_register = s1.cd_register
  AND s2.cd_warehouse='SEROUT'
  AND s2.cd_mvt_type LIKE 'S%'
  AND s2.dttm_stock_mvt > s1.dttm_stock_mvt
GROUP BY s1.dttm_stock_mvt, s1.cd_warehouse, s2.cd_warehouse
ORDER BY entree
en gros y'avait juste à supprimer s1.cd_batch = s2.cd_batch dans le where et le min(s2.dttm_stock_mvt) à enlever du group by dans la requete que tu m'as soumise.

c'était cette notion avec le min et le > qui me manquait justement !
tu m'enlèves une bonne épine du pied ^^. merci beaucoup
oOBaalberithOo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h38.


 
 
 
 
Partenaires

Hébergement Web