Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
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 19/05/2011, 14h59   #1
Invité régulier
 
Inscription : mars 2009
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 25
Points : 7
Points : 7
Par défaut Formuler une requête sql

Bonjour à tous et à toutes,
J'ai une question relative à l'écriture d'une requête qui doit faire le test suivant :

Sur un ensemble de résultat retourné par une requête, j'ai des groupes d'enregistrement représentés par un id et d'autres champs.

Ce que je souhaiterai, c'est de dire si pour un enregistrement dans le groupe X, le champ Y n'est pas égale à par exemple une valeur z, ne pas me retourner le champs mais aussi le groupe auquel appartient l'enregistrement.
Exp :

ID Statut Autres champs …
11 1 …
11 7 …
23 2 …
23 9 …


Pour l'ID 23, Statut <> 7 , donc ne pas me retourner l'enregistrement 23 mais aussi l'enregistrement 23 avec statut 2.

En gros, me laisser que les enregistrements qui ont eu un statut = 7 à une date

Je ne sais pas comment formuler ce problème à l'aide d'une requête?
Si je mets une condition Where statut = 7, le résultat est uniquement les enregistrement avec statut =7 mais pas les enregistrement avec le meme ID mais statut différent de 7.

Pouvez-vous m'aider ?
Marsupilami23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 16h01   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,

Je ne suis pas sur de bien comprendre le problème.

Est-ce que cette requete vous donne ce que vous voulez ?

Code SQL :
1
2
3
4
5
6
 
SELECT T.ID, T.Statut, T.AutreColonne
FROM MaTable T
INNER JOIN MaTable T2
    ON T.ID = T2.ID
    AND T2.Statut = 7
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 16h48   #3
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 746
Points : 746
sinon

Code :
1
2
3
4
5
6
7
8
9
 
SELECT t1.*
FROM t1
WHERE EXISTS (
SELECT 1
FROM t1 AS t2
WHERE t1.id = t2.id
AND t2.STATUS = 7
)
ou alors

Code :
1
2
3
4
5
6
7
8
 
SELECT t1.*
FROM t1
WHERE id IN (
SELECT id
FROM t1 AS t2
WHERE t2.STATUS = 7
)
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 17h44   #4
Invité régulier
 
Inscription : mars 2009
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 25
Points : 7
Points : 7
Merci sergejack pour t a réponse.
J'ai testé ta première solution, elle a l'ai de bien marcher.
Du coup, dans ton deuxième select :

....
Where exists(

select 1
)

Le '1' que veut-il dire exactement ?
Marsupilami23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 17h51   #5
Invité régulier
 
Inscription : mars 2009
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 25
Points : 7
Points : 7
Citation:
Envoyé par aieeeuuuuu Voir le message
Bonjour,

Je ne suis pas sur de bien comprendre le problème.

Est-ce que cette requete vous donne ce que vous voulez ?

Code SQL :
1
2
3
4
5
6
 
SELECT T.ID, T.Statut, T.AutreColonne
FROM MaTable T
INNER JOIN MaTable T2
    ON T.ID = T2.ID
    AND T2.Statut = 7


Ta requête me donne le bon résultat.
Je t'explique. J'ai des commandes différentes qui changent de statuts avec le temps. Du coup, quand le statut d'une commande change, on l'insère dans la base de donnée avec le meme id cmd mais avec un statut différent.
Moi ce que je veux, c'est que la requête me retourne toutes les commandes qui ont eu a un moment donné le statut =7 (statut final), avec l'historique de ce qui s'est passé avant.
c a d id cmd =23
cette commande est passé d'un statut 1 a 9 a 5 a 7
idcmd=56
cette commane est passé d'un statut 1 à 5 à9 mais pas à 7

La requete doit me retourner que la cmd 23 avec les differents statuts

mais pas la commande 56.
Marsupilami23 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 19h44.


 
 
 
 
Partenaires

Hébergement Web