IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Requête SQL avec conditions


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Requête SQL avec conditions
    Bonjour à tous,

    J'ai un petit soucis avec une requête SQL :
    Voici le type d'entrées que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Numéro	Nom	Hotel	Pourcentage_1	Nombredenuit	Pourcentage 2
    					
    01A	Frank	Hilton	<Null>			<Null>		50,00
    01A	Frank	F1	100,00			<Null>		50,00
    02B	Antoine	Ozone	<Null>			2		<Null>
    02B	Antoine	Etap	100,00			5		100,00
    02B	Antoine	Ozone	<Null>			2		<Null>
    02B	Antoine	Ozone	100,00			<Null>		100,00
    02B	Antoine	Etap	<Null>			0		<Null>
    03C	Elodie	Mariott	50,00			<Null>		<Null>
    03C	Elodie	IbisEco	50,00			<Null>		100,00
    04D	Jeremy	Ibis	100,00			<Null>		100,00
    04D	Jeremy	B2B	20,00			<Null>		20,00
    Tout d'abord, qu'est ce que je souhaite obtenir ? les champs identifiés en rouges : ils correspondent chacun à une règle de gestion précise :
    Il me faut comme sortie 4 lignes pour cet exemple.

    Il me faut de manière unique un Numéro et un nom (les informations pourcentage1&2 et nombre de nuit ne servent qu'aux tris)

    1 ) Règle numéro 1 exemple numéro : 01A => Il faut que le pourcentage_1 soit supérieur au pourcentage_2 ce qui nous donne comme entrée la ligne 4 ( 01A Frank F1 )

    2 ) Règle numéro 2 : si Pourcentage_1 = Pourcentage_2, alors il faut faire la somme des nombres de nuits et prendre la valeur la plus grande: ici on a 5 > ( 2 + 2 ) donc on va sélectionner l’hôtel de la ligne 6 ( 02B Antoine Etape )

    3 ) Règle numéro 3 : Dans le cas ou l'on n'a pas une ligne avec pourcentage_1 > Pourcentage_2, on sélectionne l'entrée avec le pourcentage le plus important, en l'occurence ici l'entrée 03C Elodie IbisEco car elle contient 100 en pourcentage_2

    4 ) Règle numéro 4 : en cas d'égalité de pourcentages mais pas de nombre de nuit pour faire la comparaison, on sélectionne l'entrée ayant le pourcentage le plus important , ici 04D Jeremy Ibis car 100 > 20.

    Il y a donc 4 régles de gestions , j'ai pensé à utiliser un ifthenelse imbriqué ou un case mais je ne parviens pas a le construire.

    Ma table s'appelant T1 et les champs numéro, nom et hotel sont des varchar alors que pourcentage_1&2 ainsi que nombredenuit sont des décimaux.
    Le soucis est qu'en plus des 4 régles ç gérer , on a une somme a faire dans un cas avec les nuits d'hotels et donc le group by associé.

    La requête que j'imagine serait :
    Select numero, nom, Hotel
    From T1
    + Mes conditions

    Mon problème est que je n'arrive pas à visualiser comment regrouper mes données et requêter par groupe de plusieurs lignes ni comment effectuer des comparaisons sur les même champs.

    J'ai essayé d'utiliser des nvl pour supprimer les valeurs nulles sur les nuits d'hotel mais ca ne me permet que de régler un seul cas( le numéro 2 ).

    Toute aide serait grandement, voir inestimablement appréciée.

    Merci !
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Voici une première ébauche qui pourrait être sans doute améliorée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> With Data As (
      2    Select '01A' As Numero, 'Frank' As Nom, 'Hilton' As Hotel,  Null As Pourcentage_1, Null As Nombredenuit, 50 As Pourcentage_2 from dual union all
      3    Select '01A' As Numero, 'Frank' As Nom, 'F1' As Hotel, 100 As Pourcentage_1, Null As Nombredenuit, 50 As Pourcentage_2 from dual union all
      4    Select '02B' As Numero, 'Antoine' As Nom, 'Ozone' As Hotel, Null As Pourcentage_1, 2 As Nombredenuit, Null As Pourcentage_2 from dual union all
      5    Select '02B' As Numero, 'Antoine' As Nom, 'Etap' As Hotel, 100 As Pourcentage_1, 5 As Nombredenuit, 100 As Pourcentage_2 from dual union all
      6    Select '02B' As Numero, 'Antoine' As Nom, 'Ozone' As Hotel, Null As Pourcentage_1, 2 As Nombredenuit, Null As Pourcentage_2 from dual union all
      7    Select '02B' As Numero, 'Antoine' As Nom, 'Ozone' As Hotel, 100 As Pourcentage_1, Null As Nombredenuit, 100 As Pourcentage_2 from dual union all
      8    Select '02B' As Numero, 'Antoine' As Nom, 'Etap' As Hotel, Null As Pourcentage_1, 0  As Nombredenuit, Null As Pourcentage_2 from dual union all
      9    Select '03C' As Numero, 'Elodie' As Nom, 'Mariott' As Hotel, 50 As Pourcentage_1, Null  As Nombredenuit, Null As Pourcentage_2 from dual union all
     10    Select '03C' As Numero, 'Elodie' As Nom, 'IbisEco' As Hotel, 50 As Pourcentage_1, Null  As Nombredenuit,  100 As Pourcentage_2 from dual union all
     11    Select '04D' As Numero, 'Jeremy' As Nom, 'Ibis' As Hotel, 100 As Pourcentage_1, Null  As Nombredenuit, 100 As Pourcentage_2 from dual union all
     12    Select '04D' As Numero, 'Jeremy' As Nom, 'B2B' As Hotel, 20 As Pourcentage_1, Null As Nombredenuit, 20  As Pourcentage_2 from dual
     13  ),
     14  Regle2 as (
     15  Select numero, Nom, Hotel, Pourcentage_1, Nombredenuit, Pourcentage_2,
     16         Sum(Nombredenuit) Over (Partition by numero, hotel) TotNbrNuit
     17      From Data
     18  ),
     19  Regles14 As (
     20   Select numero, Nom, Hotel, Pourcentage_1, Nombredenuit, Pourcentage_2,
     21         Case
     22           When Pourcentage_1 > Pourcentage_2 Then 1
     23           When Pourcentage_1 = Pourcentage_2 And Max(TotNbrNuit) Over (Partition by numero) = TotNbrNuit Then 2
     24           When Pourcentage_1 = Pourcentage_2 And TotNbrNuit Is Null And Max(Pourcentage_1) Over (Partition by numero) = Pourcentage_1 Then 4
     25           When Pourcentage_1 < Pourcentage_2 And Max(Pourcentage_2) Over (Partition by numero) = Pourcentage_2 Then 3
     26         End r
     27    From Regle2
     28  )
     29  Select *
     30    From Regles14
     31   Where r In (1,2,3,4)
     32  /
     
    NUMERO NOM     HOTEL   POURCENTAGE_1 NOMBREDENUIT POURCENTAGE_2          R
    ------ ------- ------- ------------- ------------ ------------- ----------
    01A    Frank   F1                100                         50          1
    02B    Antoine Etap              100            5           100          2
    03C    Elodie  IbisEco            50                        100          3
    04D    Jeremy  Ibis              100                        100          4
     
    SQL>

Discussions similaires

  1. Requête SQL avec une condition portant sur date
    Par kekule10 dans le forum PyQt
    Réponses: 3
    Dernier message: 03/08/2014, 01h56
  2. fusionner requête SQL avec conditions différentes
    Par breizhlama dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/05/2011, 14h36
  3. Requêtes SQL avec conditions
    Par leukes dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/07/2008, 09h30
  4. Requête SQL avec condition
    Par charlix dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/03/2008, 11h38
  5. [MySQL] concaténer une requête sql avec condition
    Par maliak dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/02/2006, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo