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

MS SQL Server Discussion :

Conditionnelle avec plusieurs critères


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Je produit des statistiques pour le SDIS 47.
    Inscrit en
    Avril 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Je produit des statistiques pour le SDIS 47.
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 73
    Points : 53
    Points
    53
    Par défaut Conditionnelle avec plusieurs critères
    N° Inter Année N° Ord. Num Renf. N° Dép Centre Engin engagé Libellé sinistre DH alerte engin engagé
    10000 2013 1 0 MA MARMANDE EPS 25 FEU D'APPARTEMENT 11/06/2013 17:29
    10000 2013 1 0 1er EP MARMANDE FPT FEU D'APPARTEMENT 11/06/2013 17:29
    10000 2013 1 1 1er EP SAINTE BAZEILLE FPTR FEU D'APPARTEMENT 11/06/2013 17:29
    10000 2013 2 0 2ème EP MARMANDE FPT FEU D'APPARTEMENT 11/06/2013 17:37


    Je n'arrive pas dans ma requête à dire :
    Si le N° Inter et le DH Alerte de l'engin de N° Dép. 'MA' est = au N° Inter et au DH Alerte de l'engin du 1er EP et est = le N° Inter et au DH Alerte de l'engin du '2ème EP' alors "1ère alerte" sinon " 2ème alerte

    Je vous remercie pour vos réponses que m'enlèverez une grosse épine du pied.

    Taz

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 726
    Points
    52 726
    Billets dans le blog
    5
    Par défaut
    Il suffit d'utiliser l'opérateur CASE.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre du Club
    Homme Profil pro
    Je produit des statistiques pour le SDIS 47.
    Inscrit en
    Avril 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Je produit des statistiques pour le SDIS 47.
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 73
    Points : 53
    Points
    53
    Par défaut Conditionnelle avec plusieurs critères
    J'avais bien compris qu'il fallait que je passe par un case when, à part que je ne sais pas du tout comment lui faire dire.
    case when (N° inter and N° Dép = 1er EP and DH_Alerte) = (N° inter and N° Dép = 2ème EP and DH_Alerte) and (N° inter and N° Dép = MA EP and DH_Alerte) alors 1ère alerte else 2ème alerte end

    Même si j'arrive à me débrouiller pour certaine stats, le fait de les complexifier me pose des problèmes. Cela fait à peine 6 mois que je fais du langage SQL.

    Merci de votre compréhension...

    TAZ

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Peut-être qu'une vue avec en colonne supplémentaire ce CASE vous simplifierait l'expression de la requête ...

    @++

  5. #5
    Membre du Club
    Homme Profil pro
    Je produit des statistiques pour le SDIS 47.
    Inscrit en
    Avril 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Je produit des statistiques pour le SDIS 47.
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 73
    Points : 53
    Points
    53
    Par défaut Classer des délais.
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    SELECT DISTINCT I.ID_INTERVENTION_SDIS AS 'N° Inter MA',
                    EE.DH_ALERTE AS 'DH Alerte',
                    EE.DH_SLL AS 'DH SLL',
                    CASE(EE.NUM_ORDRE+''+EE.NUM_RENFORT) WHEN 1 THEN 'Départ 1er Centre' WHEN 2 THEN 'Départ 2ème Centre' WHEN 3 THEN 'Départ 3ème Centre' END AS 'Départ Centre', 
                    EE.NUM_ORDRE,
                    CEN.LIB_CENTRE AS 'Centre',
                    EE.ID_TYPE_ENGIN AS 'Matériel',
                    EE.FONCTION AS 'Fonct° Engin',
                    CONVERT(VARCHAR,(EE.DH_SLL-EE.DH_ALERTE),108) AS 'Délai Engin',
                    CASE  WHEN CONVERT(VARCHAR,(EE.DH_SLL-EE.DH_ALERTE),108) <'00:15:00' THEN '< 15 mn' 
                          WHEN CONVERT(VARCHAR,(EE.DH_SLL-EE.DH_ALERTE),108) BETWEEN '00:15:00' AND '00:20:00'  THEN '>= 15 & < 20 mn' 
                          WHEN CONVERT(VARCHAR,(EE.DH_SLL-EE.DH_ALERTE),108) BETWEEN '00:20:00' AND '00:25:00'  THEN '>= 20 & < 25 mn'
                          ELSE '25 mn' END AS 'Interv. Délai',
     
                    SIN.LIB_SINISTRE AS 'Nom Sinistre',
                    SIN.FAMILLE_SINISTRE AS 'Famille sinistre',
                    COM.NOM_COMMUNE AS 'Commune',
                    I.TYPE_LIEU+' '+I.NOM_LIEU AS 'Adresse'
     
           FROM OPS_INTERVENTION I
     
                INNER JOIN OPS_ENGIN_ENGAGE EE ON EE.ID_INTERVENTION = I.ID_INTERVENTION
                INNER JOIN OPS_CENTRE CEN ON CEN.ID_CENTRE = EE.ID_CENTRE
                INNER JOIN OPS_SINISTRE SIN ON SIN.ID_SINISTRE = I.ID_SINISTRE
                INNER JOIN OPS_COMMUNE COM ON COM.INSEE = I.INSEE
     
          WHERE YEAR(EE.DH_ALERTE) = 2013
                AND SIN.CATEGORIE_SINISTRE = 'INCENDIE'
                --AND COM.INSEE IN ('47001','47157','47323')
                AND EE.ID_TYPE_ENGIN NOT IN ('VSAV','VAR','PCC','VLRTT','VIRT','DA','RM','CAMERA','DAL','VLU','VLR','VTU','VTP')
                --AND COM.INSEE IN ('47004','47031','47032','47049','47052','47065','47069','47100','47106','47168','47179','47195','47201','47209','47210','47215','47233','47252','47310')
                AND COM.INSEE NOT IN ('47001','47157','47323','47004','47031','47032','47049','47052','47065','47069','47100','47106','47168','47179','47195','47201','47209','47210','47215','47233','47252','47310')
                AND EE.NUM_ORDRE = 1
                /*AND EE.NUM_ORDRE+''+EE.NUM_RENFORT <= '03'*/
     
     
                GROUP BY  I.ID_INTERVENTION_SDIS,
                    EE.DH_ALERTE,
                    EE.DH_SLL,
                    EE.NUM_ORDRE+''+EE.NUM_RENFORT, 
                    EE.NUM_ORDRE,
                    CEN.LIB_CENTRE,
                    EE.ID_TYPE_ENGIN,
                    EE.FONCTION,
                    CONVERT(VARCHAR,(EE.DH_SLL-EE.DH_ALERTE),108),
                    CASE  WHEN CONVERT(VARCHAR,(EE.DH_SLL-EE.DH_ALERTE),108) <'00:15:00' THEN '< 15 mn' 
                          WHEN CONVERT(VARCHAR,(EE.DH_SLL-EE.DH_ALERTE),108) BETWEEN '00:15:00' AND '00:20:00'  THEN '>= 15 & < 20 mn' 
                          WHEN CONVERT(VARCHAR,(EE.DH_SLL-EE.DH_ALERTE),108) BETWEEN '00:20:00' AND '00:25:00'  THEN '>= 20 & < 25 mn'
                          ELSE '25 mn' END,
     
                    SIN.LIB_SINISTRE,
                    SIN.FAMILLE_SINISTRE,
                    COM.NOM_COMMUNE,
                    I.TYPE_LIEU+' '+I.NOM_LIEU, 
                    I.DH_DIFFUSION_1ERE_ALERTE
     
                HAVING   EE.DH_ALERTE = I.DH_DIFFUSION_1ERE_ALERTE

    Ma question est la suivante :
    Comment puis-je faire dire dans ma requête que pour chaque "I.ID_INTERVENTION_SDIS", le délai le plus bas de tous les engins est = au 1er engin , puis le délai supérieur au 1er engin est = au 2ème engin puis délai supérieur à 2 est = à délai 3ème ...etc , sachant que tous les engins ont un DH déclenchement identique.

    Merci pour votre aide.

    Cordialement

    Taz

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    je ne suis pas sûr de bien comprendre ce que vous voulez un jeu d'essai plus résultat attendu seraient les bienvenus.
    Voici néanmoins une piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ROW_NUMBER() OVER(
            PARTITION BY I.ID_INTERVENTION_SDIS 
            ORDER BY (EE.DH_SLL-EE.DH_ALERTE)
    ) AS Rang

  7. #7
    Membre du Club
    Homme Profil pro
    Je produit des statistiques pour le SDIS 47.
    Inscrit en
    Avril 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Je produit des statistiques pour le SDIS 47.
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 73
    Points : 53
    Points
    53
    Par défaut Mille merci...
    Mille merci, c'est génial , cela fonctionne impécablement.

  8. #8
    Membre du Club
    Homme Profil pro
    Je produit des statistiques pour le SDIS 47.
    Inscrit en
    Avril 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Je produit des statistiques pour le SDIS 47.
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 73
    Points : 53
    Points
    53
    Par défaut Récuper le N° de départ
    Code SQL : 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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    SELECT DISTINCT I4.ID_INTERVENTION_SDIS AS 'N° Inter',
                    EE4.DH_ALERTE AS 'DH Alerte',
                    EE4.DH_SLL AS 'DH SLL',
                    CONVERT(VARCHAR,(EE4.DH_SLL - EE4.DH_ALERTE),108) AS 'Délai Engin',
                    CASE  WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 1 THEN '1er EP SLL'
                          WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 2 THEN '2ème EP SLL'
                          WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 3 THEN '3ème EP SLL'
                          WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 4 THEN '4ème EP SLL'
                          END AS 'Ordre départ' ,
                    EE4.NUM_RENFORT,
                    EE4.NUM_ORDRE+''+EE4.NUM_RENFORT AS 'N° Départ',
                    CASE  WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) <'00:15:00' THEN '< 15 mn'
                          WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) BETWEEN '00:15:00' AND '00:20:00'  THEN '> 15 & < 20 mn'
                          WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) BETWEEN '00:20:00' AND '00:25:00'  THEN '> 20 & < 25 mn'
                          ELSE '> 25 mn' END AS 'Interv. Délai',
                    CEN4.LIB_CENTRE AS 'Centre',
                    EE4.ID_TYPE_ENGIN AS 'Matériel',
                    CASE WHEN (EE4.ID_TYPE_ENGIN) IN ('CCFM','CCFM 3','FPT','FPTL','FPTR','CCFR','UCCFM','UCCFS') THEN 'Eng. Pompe'
                         WHEN (EE4.ID_TYPE_ENGIN) IN ('CCGC','CCGP','CCGC FDF') THEN 'Eng. Alim'
                         ELSE 'Moyen aérien' END  AS 'Type engin',              
                    EE4.FONCTION AS 'Fonct° Engin',
                    SIN4.LIB_SINISTRE AS 'Nom Sinistre',
                    SIN4.FAMILLE_SINISTRE AS 'Famille sinistre',
                    COM4.NOM_COMMUNE AS 'Commune',
                    I4.TYPE_LIEU+' '+I4.NOM_LIEU AS 'Adresse'
                       
                        FROM OPS_INTERVENTION I4
          
                              INNER JOIN OPS_ENGIN_ENGAGE EE4 ON EE4.ID_INTERVENTION = I4.ID_INTERVENTION
                              INNER JOIN OPS_CENTRE CEN4 ON CEN4.ID_CENTRE = EE4.ID_CENTRE
                              INNER JOIN OPS_SINISTRE SIN4 ON SIN4.ID_SINISTRE = I4.ID_SINISTRE
                              INNER JOIN OPS_COMMUNE COM4 ON COM4.INSEE = I4.INSEE
               
                                  WHERE YEAR(EE4.DH_ALERTE) = 2013
                                        AND SIN4.CATEGORIE_SINISTRE = 'INCENDIE'
                                        AND COM4.INSEE IN ('47001','47157','47323')
                                        AND EE4.NUM_ORDRE = 1
                                        AND EE4.ID_TYPE_ENGIN IN ('CCFM','CCFM 3','FPT','FPTL','FPTR','CCFR','UCCFM','UCCFS')
                                        AND EE4.DH_ALERTE = I4.DH_DIFFUSION_1ERE_ALERTE
                                        AND CASE  WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= '02'
                                       
         
                                  GROUP BY  I4.ID_INTERVENTION_SDIS,
                                            EE4.DH_ALERTE,
                                            EE4.DH_SLL,
                                            EE4.NUM_RENFORT,
                                            EE4.NUM_ORDRE+''+EE4.NUM_RENFORT,
                                            EE4.NUM_ORDRE,
                                            CEN4.LIB_CENTRE,
                                            EE4.ID_TYPE_ENGIN,
                                            EE4.FONCTION,
                                            CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108),
                                            CASE  WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 1 THEN '1er EP SLL'
                                                  WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 2 THEN '2ème EP SLL'
                                                  WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 3 THEN '3ème EP SLL'
                                                  WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 4 THEN '4ème EP SLL'
                                                  END,
                                            CASE  WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) <'00:15:00' THEN '< 15 mn'
                                                  WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) BETWEEN '00:15:00' AND '00:20:00'  THEN '> 15 & < 20 mn'
                                                  WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) BETWEEN '00:20:00' AND '00:25:00'  THEN '> 20 & < 25 mn'
                                                  ELSE '> 25 mn' END,
                                            SIN4.LIB_SINISTRE,
                                            SIN4.FAMILLE_SINISTRE,
                                            COM4.NOM_COMMUNE,
                                            I4.TYPE_LIEU+' '+I4.NOM_LIEU,
                                            I4.DH_DIFFUSION_1ERE_ALERTE,
                                            I4.DH_SLL_1ER_ENGIN
    Mon dernier problème est de récupérer le N° de départ afin de pouvoir renseigner des critères horaires qui sont différents suivant que le véhicule est le 1er ou le 2ème engin pompe.

    D'avance, je vous en remercie.

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Vous ne pouvez pas utiliser directement ROW_NUMBER() dans la clause WHERE, car ROW_NUMBER() s'applique sur les résultat de la requête, qui n'existe pas encore au moment ou la clause WHERE est applicquée.

    Vous pouvez cependant mettre votre requête dans une CTE,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    WITH CTE AS (--votre requte ici, contenant le ROW_NUMBER
        SELECT ... 
    , ROW_NUMBER() OVER(...) AS Rn
    FROM ... 
    )
    SELECT Les colonne
    FROM CTE
    WHERE CASE WHEN Rn = 2 THEN ... END ...

  10. #10
    Membre du Club
    Homme Profil pro
    Je produit des statistiques pour le SDIS 47.
    Inscrit en
    Avril 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Je produit des statistiques pour le SDIS 47.
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 73
    Points : 53
    Points
    53
    Par défaut Clause With
    Cela fait peu de temps que je pratique SQL SERVER et je reconnais avoir du mal à comprendre. Je connais que les fondamentaux; je dois suivre un stage pour me perfectionner mais cela n'aura lieu qu'au mois de septembre.
    Est ce que cela correspond à ce que vous me dites.

    Merci

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
     
    WITH CTE AS (I4.ID_INTERVENTION_SDIS AS 'N° Inter',
                 EE.DH_ALERTE AS 'DH Alerte',
                 EE4.DH_SLL AS 'DH SLL',
                 CONVERT(VARCHAR,(EE4.DH_SLL - EE4.DH_ALERTE),108) AS 'Délai Engin',
                 CASE WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 1 THEN '1er EP SLL' 
                      WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 2 THEN '2ème EP SLL' 
                      WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 3 THEN '3ème EP SLL' 
                      WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 4 THEN '4ème EP SLL' 
                      END AS 'Ordre départ' ,
                 EE4.NUM_RENFORT,
                 EE4.NUM_ORDRE+''+EE4.NUM_RENFORT AS 'N° Départ',
                 CASE  WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) <'00:15:00' THEN '< 15 mn' 
                       WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) BETWEEN '00:15:00' AND '00:20:00'  THEN '> 15 & < 20 mn' 
                       WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) BETWEEN '00:20:00' AND '00:25:00'  THEN '> 20 & < 25 mn'
                       ELSE '> 25 mn' END AS 'Interv. Délai',
                 CEN4.LIB_CENTRE AS 'Centre',
                 EE4.ID_TYPE_ENGIN AS 'Matériel',
                 CASE WHEN (EE4.ID_TYPE_ENGIN) IN ('CCFM','CCFM 3','FPT','FPTL','FPTR','CCFR','UCCFM','UCCFS') THEN 'Eng. Pompe' 
                      WHEN (EE4.ID_TYPE_ENGIN) IN ('CCGC','CCGP','CCGC FDF') THEN 'Eng. Alim' 
                      ELSE 'Moyen aérien' END  AS 'Type engin',              
                 EE4.FONCTION AS 'Fonct° Engin',
                 SIN4.LIB_SINISTRE AS 'Nom Sinistre',
                 SIN4.FAMILLE_SINISTRE AS 'Famille sinistre',
                 COM4.NOM_COMMUNE AS 'Commune',
                 I4.TYPE_LIEU+' '+I4.NOM_LIEU AS 'Adresse'
     
                        FROM OPS_INTERVENTION I4
     
                              INNER JOIN OPS_ENGIN_ENGAGE EE4 ON EE4.ID_INTERVENTION = I4.ID_INTERVENTION
                              INNER JOIN OPS_CENTRE CEN4 ON CEN4.ID_CENTRE = EE4.ID_CENTRE
                              INNER JOIN OPS_SINISTRE SIN4 ON SIN4.ID_SINISTRE = I4.ID_SINISTRE
                              INNER JOIN OPS_COMMUNE COM4 ON COM4.INSEE = I4.INSEE) AS 'Ordre départ',
     
    SELECT DISTINCT I4.ID_INTERVENTION_SDIS AS 'N° Inter',
                    EE4.DH_ALERTE AS 'DH Alerte',
                    EE4.DH_SLL AS 'DH SLL',
                    CONVERT(VARCHAR,(EE4.DH_SLL - EE4.DH_ALERTE),108) AS 'Délai Engin',
                    CASE  WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 1 THEN '1er EP SLL' 
                          WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 2 THEN '2ème EP SLL' 
                          WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 3 THEN '3ème EP SLL' 
                          WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 4 THEN '4ème EP SLL' 
                          END AS 'Ordre départ' ,
                    EE4.NUM_RENFORT,
                    EE4.NUM_ORDRE+''+EE4.NUM_RENFORT AS 'N° Départ',
                    CASE  WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) <'00:15:00' THEN '< 15 mn' 
                          WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) BETWEEN '00:15:00' AND '00:20:00'  THEN '> 15 & < 20 mn' 
                          WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) BETWEEN '00:20:00' AND '00:25:00'  THEN '> 20 & < 25 mn'
                          ELSE '> 25 mn' END AS 'Interv. Délai',
                    CEN4.LIB_CENTRE AS 'Centre',
                    EE4.ID_TYPE_ENGIN AS 'Matériel',
                    CASE WHEN (EE4.ID_TYPE_ENGIN) IN ('CCFM','CCFM 3','FPT','FPTL','FPTR','CCFR','UCCFM','UCCFS') THEN 'Eng. Pompe' 
                         WHEN (EE4.ID_TYPE_ENGIN) IN ('CCGC','CCGP','CCGC FDF') THEN 'Eng. Alim' 
                         ELSE 'Moyen aérien' END  AS 'Type engin',              
                    EE4.FONCTION AS 'Fonct° Engin',
                    SIN4.LIB_SINISTRE AS 'Nom Sinistre',
                    SIN4.FAMILLE_SINISTRE AS 'Famille sinistre',
                    COM4.NOM_COMMUNE AS 'Commune',
                    I4.TYPE_LIEU+' '+I4.NOM_LIEU AS 'Adresse'
     
                        FROM CTE
     
                              INNER JOIN OPS_ENGIN_ENGAGE EE4 ON EE4.ID_INTERVENTION = I4.ID_INTERVENTION
                              INNER JOIN OPS_CENTRE CEN4 ON CEN4.ID_CENTRE = EE4.ID_CENTRE
                              INNER JOIN OPS_SINISTRE SIN4 ON SIN4.ID_SINISTRE = I4.ID_SINISTRE
                              INNER JOIN OPS_COMMUNE COM4 ON COM4.INSEE = I4.INSEE
     
                                  WHERE YEAR(EE4.DH_ALERTE) = 2013
                                        AND SIN4.CATEGORIE_SINISTRE = 'INCENDIE'
                                        AND COM4.INSEE IN ('47001','47157','47323')
                                        AND EE4.NUM_ORDRE = 1
                                        AND EE4.ID_TYPE_ENGIN IN ('CCFM','CCFM 3','FPT','FPTL','FPTR','CCFR','UCCFM','UCCFS')
                                        AND EE4.DH_ALERTE = I4.DH_DIFFUSION_1ERE_ALERTE
     
     
     
                                  GROUP BY  I4.ID_INTERVENTION_SDIS,
                                            EE4.DH_ALERTE,
                                            EE4.DH_SLL,
                                            EE4.NUM_RENFORT,
                                            EE4.NUM_ORDRE+''+EE4.NUM_RENFORT,
                                            EE4.NUM_ORDRE,
                                            CEN4.LIB_CENTRE,
                                            EE4.ID_TYPE_ENGIN,
                                            EE4.FONCTION,
                                            CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108),
                                            CASE  WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 1 THEN '1er EP SLL' 
                                                  WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 2 THEN '2ème EP SLL' 
                                                  WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 3 THEN '3ème EP SLL' 
                                                  WHEN (ROW_NUMBER( ) OVER(PARTITION BY I4.ID_INTERVENTION_SDIS ORDER BY (EE4.DH_SLL-EE4.DH_ALERTE)))= 4 THEN '4ème EP SLL' 
                                                  END,
                                            CASE  WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) <'00:15:00' THEN '< 15 mn' 
                                                  WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) BETWEEN '00:15:00' AND '00:20:00'  THEN '> 15 & < 20 mn' 
                                                  WHEN CONVERT(VARCHAR,(EE4.DH_SLL-EE4.DH_ALERTE),108) BETWEEN '00:20:00' AND '00:25:00'  THEN '> 20 & < 25 mn'
                                                  ELSE '> 25 mn' END,
                                            SIN4.LIB_SINISTRE,
                                            SIN4.FAMILLE_SINISTRE,
                                            COM4.NOM_COMMUNE,
                                            I4.TYPE_LIEU+' '+I4.NOM_LIEU,
                                            I4.DH_DIFFUSION_1ERE_ALERTE,
                                            I4.DH_SLL_1ER_ENGIN

  11. #11
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    pas tout à fait,

    Pour rester simple, les CTE permettent de factoriser une sous-requete, afin de la réutiliser dans une autre requête. (C'est donc une sorte de vue, valide pour votre requête uniquement)

    globalement, sa syntaxe (sous forme d'exemple, et simplifiée au strict minimum qui nous intéresse ici) est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    WITH UnAlias AS ( --requete ici, par exemple :
         SELECT a, Min(b) AS Mini, AVG(b) as moyenne
         FROM UnTable
         INNER JOIN UneAutreTable
            ON ...
        WHERE ...
        GROUP BY a
    )
    SELECT a,mini, moyenne
    FROM UnAlias -->utilisation de la CTE
    WHERE ...
    notez que vous pouvez référencer plusieurs fois la CTE dans votre requête.
    Comme vous n'en n'avez pas le besoin ici, et si cela vous convient mieux comme syntaxe, vous pouvez également placer votre requête en sous-requête (table dérivée) afin de pouvoir "travailler" sur le résultat du ROW_NUMBER()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT UnAlias.colonne1, ...
    FROM (
        SELECT -->votre requete ici
    ) AS UnAlias

    Attention, je vous invite à éviter les noms de colonnes contenant des caractères spéciaux, accents, espaces...
    effectuez ce renommage, destiné à l'affichage, au moment de ... l'affichage

  12. #12
    Membre du Club
    Homme Profil pro
    Je produit des statistiques pour le SDIS 47.
    Inscrit en
    Avril 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Je produit des statistiques pour le SDIS 47.
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 73
    Points : 53
    Points
    53
    Par défaut Conditionnelle avec plusieurs critères.
    :

    J'ai pu éditer ma requête en passant par la 2ème solution; Je vous remercie pour votre patience.

    Cordialement.

    TAZ

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche avec plusieurs critères
    Par Eco dans le forum Excel
    Réponses: 12
    Dernier message: 20/07/2016, 18h07
  2. Réponses: 6
    Dernier message: 23/11/2011, 16h36
  3. Compte d'enregistrement avec plusieurs critères
    Par MAMANHOU dans le forum VBA Access
    Réponses: 9
    Dernier message: 25/07/2007, 09h14
  4. requête SQL avec plusieurs critères de sélection
    Par gailup dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/06/2007, 08h44
  5. VBA-E Comment réaliser une recherche avec plusieurs critères ?
    Par Larsen21 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 14/12/2006, 13h43

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