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 29/11/2010, 15h36   #1
Invité de passage
 
Inscription : janvier 2009
Messages : 10
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 10
Points : 2
Points : 2
Par défaut [SQL] pb requete au niveau des 'priorités'

Hello tout le monde,
Gros soucis de débutant SQL sur une requête :

Soit une table CODE_RETOUR avec les enregistrements suivants :
Code :
1
2
3
4
5
6
 
  COD   LIBELLE
  001   Erreur Base 
  002   Erreur Disque
  003   Erreur Systeme
  004   Ok
Soit une table LOG_TRAITEMENT avec les enregistrements suivants :
Code :
1
2
3
4
5
6
7
8
 
  DEM   COD   DATE      RESULTAT
  CD1   001   10/10/10  SAVE
  CD2   002   10/10/10  SAVE
  CD4   004   09/10/10  LOG
  CD6   003   09/10/10  SAVE
  CD4   001   08/10/10  LOG
  CD5   004   08/10/10  SAVE
Soit une table RESULTAT avec les enregistrements suivants :
Code :
1
2
3
4
 
  RESULTAT  LIBELLE
  SAVE      Sauvegarde Totale
  LOG       Sauvegarde partielle
Je voudrais faire une requete pour sortir tous les traitements de LOG_TRAITEMENT qui sont en date du 10/10/10 avec un COD different de 004 et DEM different de CD4.
Code :
1
2
3
4
5
 
  SELECT * FROM LOG_TRAITEMENT 
  WHERE COD NOT IN ('004') 
  AND DEM NOT IN ('CD4')
  AND to_char (DATE, 'DD/MM/YY')='10/10/10'
Seulement dans ce cas là, je ne ressortirais pas les enregistrements ou CD4 est associé à autre chose que 004

En gros : je n'arrive pas à faire de requête pour élargir mon critère à plusieurs colonnes (je sais pas si suis très clair là...) du genre :
Code :
1
2
3
4
 
   SELECT * FROM LOG_TRAITEMENT 
  WHERE (COD NOT IN ('004') AND DEM NOT IN ('CD4'))
  AND to_char (DATE, 'DD/MM/YY')='10/10/10'
Mais ça marche pas
Une idée svp ?
E.O.D est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 29/11/2010, 16h21   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 925
Points : 1 925
Je crois que ça ça marche :
Code :
1
2
3
SELECT * FROM LOG_TRAITEMENT 
WHERE (COD,DEM) != ('004','CD4')
AND DATE = to_date('10/10/2010','dd/mm/yyyy')
Attention c'est ta chaîne de caractère que tu dois convertir en date et non l'inverse (pense au cas '10/10/10' > '01/11/10' en chaîne de caractère)
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 17h03   #3
Invité de passage
 
Inscription : janvier 2009
Messages : 10
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 10
Points : 2
Points : 2
Citation:
Envoyé par skuatamad Voir le message
Je crois que ça ça marche :
Code :
1
2
3
SELECT * FROM LOG_TRAITEMENT 
WHERE (COD,DEM) != ('004','CD4')
AND DATE = to_date('10/10/2010','dd/mm/yyyy')
Attention c'est ta chaîne de caractère que tu dois convertir en date et non l'inverse (pense au cas '10/10/10' > '01/11/10' en chaîne de caractère)
Bah non ça marche pas
merci pour la correction pour l'histoire de la date par contre
E.O.D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 17h14   #4
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 925
Points : 1 925
Ca c'est plus classique, ça devrait être bon :
Code :
1
2
3
4
5
6
7
SELECT * FROM LOG_TRAITEMENT
WHERE DATE = to_date('10/10/2010','dd/mm/yyyy')
MINUS
SELECT * FROM LOG_TRAITEMENT 
WHERE COD = '004'
AND DEM = 'CD4'
AND DATE = to_date('10/10/2010','dd/mm/yyyy')
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 18h31   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 683
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 683
Points : 10 460
Points : 10 460
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Il y a trois solutions, on va plutôt partir sur la journée du 8 octobre, c'est quand même plus représentatif du problème que le 10.

La première idée de skuatamad est correcte mais c'est la syntaxe qui pèche.
Il faut l'écrire ainsi :
Code :
1
2
3
4
SELECT DEM, COD, DATE, RES
  FROM LOG_TRAITEMENT 
 WHERE DATE = to_date('08/10/2010','dd/mm/yyyy')
   AND (COD,DEM) <> (('004','CD4'));
Si vous n'êtes pas à l'aise avec cette écriture, vous pouvez utilisez celle-ci :
Code :
1
2
3
4
SELECT DEM, COD, DATE, RES
  FROM LOG_TRAITEMENT 
 WHERE DATE = to_date('08/10/2010','dd/mm/yyyy')
   AND (COD <> '004' OR DEM <> 'CD4');
Ou son opposé, peut-être la plus simple à relire :
Code :
1
2
3
4
SELECT DEM, COD, DATE, RES
  FROM LOG_TRAITEMENT 
 WHERE DATE = to_date('08/10/2010','dd/mm/yyyy')
   AND NOT (COD = '004' AND DEM = 'CD4');
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/11/2010, 13h04   #6
Invité de passage
 
Inscription : janvier 2009
Messages : 10
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 10
Points : 2
Points : 2
Nickel tout compris et en plus ça marche
Merci à vous deux
E.O.D 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 00h55.


 
 
 
 
Partenaires

Hébergement Web