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

Langage SQL Discussion :

condition if requete


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 189
    Par défaut condition if requete
    Bonjour,

    Je suis en train de modifier une vue et j'ai un attribut (dossiers_jal.date) pour lequel je voudrais mettre une condition (id_direction en fonction de id_classe)
    Si on a id_classe = 2 je veux affficher dossiers_jal.date c'est à dire quand l'attribut dossiers_jal.id_direction = 6
    Si on a id_classe = 10 je veux affficher dossiers_jal.date c'est à dire quand l'attribut dossiers_jal.id_direction = 4

    en gros :

    if dossiers.id_classe = 2 then dossiers_jal.id_direction = 6 => recupere dossiers_jal. date correspondant

    if dossiers.id_classe = 10 then dossiers_jal.id_direction = 4 => recupere dossiers_jal. date correspondant

    Comment puis_je l'integrer dans une vue?

    Merci pour votre aide!

    Est ce que le if then else existe en sql?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 189
    Par défaut
    Merci pour le lien. Je vais travailler avec cette piste

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 189
    Par défaut
    Bonjour, j'ai testé avec le case

    Voici le code complet de ma vue

    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
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    DROP VIEW IF EXISTS listings;
    CREATE VIEW listings AS
        SELECT
    		dossiers.id_site as id_site,
    		liste_sites.valeur as site,
    		dossiers.id_dossier as id_dossier,
    		dossiers.id_classe as id_classe,
    		clients.id_client as id_client,
    		clients.code_client as code_client,
    		clients.libelle_client as client,
    		dossiers.id_statut as id_statut,
    		liste_statuts.valeur as statut,
    		liste_statuts.valeur_court as statut_court,
    		dossiers.libelle_appli as libelle_appli,
    		dossiers.id_marche as id_marche,
    		liste_marches.valeur as marche,
    		liste_marches.valeur_court as marche_court,
    		(select min(id_utilisateur) from dossier_intervenants where dossier_intervenants.id_dossier=dossiers.id_dossier and dossier_intervenants.role='gof_CDPC' and dossier_intervenants.type_intervenant = 'P') as id_CDPC,
    		(select min(id_utilisateur) from dossier_intervenants where dossier_intervenants.id_dossier=dossiers.id_dossier and dossier_intervenants.role='gof_IC' and dossier_intervenants.type_intervenant = 'P') as id_IC,
    		(select min(id_utilisateur) from dossier_intervenants where dossier_intervenants.id_dossier=dossiers.id_dossier and dossier_intervenants.role='gof_RQC' and dossier_intervenants.type_intervenant = 'P') as id_RQC,
    		(select min(id_utilisateur) from dossier_intervenants where dossier_intervenants.id_dossier=dossiers.id_dossier and dossier_intervenants.role='gof_C_DI' and dossier_intervenants.type_intervenant = 'P') as id_C_DI,
    		(select min(id_utilisateur) from dossier_intervenants where dossier_intervenants.id_dossier=dossiers.id_dossier and dossier_intervenants.role='gof_CDG' and dossier_intervenants.type_intervenant = 'P') as id_CDG,
    		(select min(id_utilisateur) from dossier_intervenants where dossier_intervenants.id_dossier=dossiers.id_dossier and dossier_intervenants.role='gof_ADV' and dossier_intervenants.type_intervenant = 'P') as id_ADV,
    		(select min(id_utilisateur) from dossier_intervenants where dossier_intervenants.id_dossier=dossiers.id_dossier and dossier_intervenants.role='gof_CDPI' and dossier_intervenants.type_intervenant = 'P') as id_CDPI,
    		(select min(id_utilisateur) from dossier_intervenants where dossier_intervenants.id_dossier=dossiers.id_dossier and dossier_intervenants.role='gof_RRI' and dossier_intervenants.type_intervenant = 'P') as id_RRI,
    		(select min(id_utilisateur) from dossier_intervenants where dossier_intervenants.id_dossier=dossiers.id_dossier and dossier_intervenants.role='gof_DEV' and dossier_intervenants.type_intervenant = 'P') as id_DEV,
    		dossiers.date_ouverture as date_ouverture,
    		dossiers.date_dev_termine as date_dev_termine,
    		dossiers.operation as operation,
    		dossiers.num_jalon_courant as num_jalon_courant,
    		(select dossier_jalons1.date,CASE dossiers.id_classe 
    		 WHEN '1' THEN (select dossier_jalons.date from dossier_jalons where dossier_jalons.id_direction = 6)
    		 WHEN '30' THEN (select dossier_jalons.date from dossier_jalons where dossier_jalons.id_direction = 4)
    		 END J1)as J1,
    		dossier_jalons2.date as J2,
    		dossier_jalons3.date as J3,
    		dossier_jalons4.date as J4,
    		dossier_jalons5.date as J5,
    		dossier_jalons6.date as J6,
    		dossier_jalons7.date as J7,
    		dossier_jalons8.date as J8,
    		if((dossiers.num_jalon_courant >= 3) and (validation_jalons8.date is null),'NJ8',if(validation_jalons4.date is null,NULL,'J4')) as flags,
    		dossiers.date_envoi_devis as date_envoi_devis,
    		dossiers.date_envoie_BAT as date_envoi_BAT,
    		dossiers.date_envoie_BAP as date_envoi_BAP,
    		dossiers.date_transmission_ADV as date_transmission_ADV,
    		dossiers.date_pour_facturer as date_pour_facturer,
    		dossiers.date_facture as date_facture,
    		IFNULL(dossiers.montant_facture, 0) as montant_facture,
    		dossiers.code_facture as code_facture,
    		dossiers.date_fermeture as date_fermeture,
            sum((IFNULL(dossier_articles.estime_min,0) + IFNULL(dossier_articles.estime_complement_min,0))) as estime_min,
            sum((IFNULL(dossier_articles.devise_min,0) + IFNULL(dossier_articles.devise_complement_min,0))) as devise_min,
            sum((IFNULL(dossier_articles.devise_montant,0) + IFNULL(dossier_articles.devise_complement_montant,0))) as devise_montant,
    		(select sum(duree_min) from dossier_interventions where dossier_interventions.id_dossier = dossiers.id_dossier) as intervention_min,
    		dossiers.id_site_dev as id_site_dev,
    		liste_site_dev.valeur as site_dev
    	from dossiers
    		left join dossier_articles on dossier_articles.id_dossier=dossiers.id_dossier
    		left join dossier_jalons as dossier_jalons1 on dossier_jalons1.id_dossier=dossiers.id_dossier and dossier_jalons1.num_jalon=1 
    		left join dossier_jalons as dossier_jalons2 on dossier_jalons2.id_dossier=dossiers.id_dossier and dossier_jalons2.num_jalon=2 and dossier_jalons2.id_direction=6
    		left join dossier_jalons as dossier_jalons3 on dossier_jalons3.id_dossier=dossiers.id_dossier and dossier_jalons3.num_jalon=3 and dossier_jalons3.id_direction=6
    		left join dossier_jalons as dossier_jalons4 on dossier_jalons4.id_dossier=dossiers.id_dossier and dossier_jalons4.num_jalon=4 and dossier_jalons4.id_direction=6
    		left join dossier_jalons as dossier_jalons5 on dossier_jalons5.id_dossier=dossiers.id_dossier and dossier_jalons5.num_jalon=5 and dossier_jalons5.id_direction=4
    		left join dossier_jalons as dossier_jalons6 on dossier_jalons6.id_dossier=dossiers.id_dossier and dossier_jalons6.num_jalon=6 and dossier_jalons6.id_direction=4
    		left join dossier_jalons as dossier_jalons7 on dossier_jalons7.id_dossier=dossiers.id_dossier and dossier_jalons7.num_jalon=7 and dossier_jalons7.id_direction=4
    		left join dossier_jalons as dossier_jalons8 on dossier_jalons8.id_dossier=dossiers.id_dossier and dossier_jalons8.num_jalon=8 and dossier_jalons8.id_direction=4
    		left join dossier_jalons as validation_jalons4 on validation_jalons4.id_dossier=dossiers.id_dossier and validation_jalons4.num_jalon=4 and validation_jalons4.id_direction=3
    		left join dossier_jalons as validation_jalons8 on validation_jalons8.id_dossier=dossiers.id_dossier and validation_jalons8.num_jalon=8 and validation_jalons8.id_direction=0
    		left join listes as liste_sites on liste_sites.code=dossiers.id_site and liste_sites.type_code='SITE'
    		left join listes as liste_statuts on liste_statuts.code=dossiers.id_statut and liste_statuts.type_code='STATUT_DOSSIER'
    		left join listes as liste_marches on liste_marches.code=dossiers.id_marche and liste_marches.type_code='MARCHE'
    		left join listes as liste_site_dev on liste_site_dev.code=dossiers.id_site_dev and liste_site_dev.type_code='SITE_DEV'
    		left join clients on clients.id_client=dossiers.id_client
    	group by
    		dossiers.id_site,
    		liste_sites.valeur,
    		dossiers.id_dossier,
    		dossiers.id_classe,
    		clients.id_client,
    		clients.code_client,
    		clients.libelle_client,
    		dossiers.id_statut,
    		liste_statuts.valeur,
    		liste_statuts.valeur_court,
    		dossiers.libelle_appli,
    		dossiers.id_marche,
    		liste_marches.valeur,
    		liste_marches.valeur_court,
    		dossiers.date_ouverture,
    		dossiers.date_dev_termine,
    		dossiers.operation,
    		dossier_jalons1.date,
    		dossier_jalons2.date,
    		dossier_jalons3.date,
    		dossier_jalons4.date,
    		dossier_jalons5.date,
    		dossier_jalons6.date,
    		dossier_jalons7.date,
    		dossier_jalons8.date,
    		validation_jalons4.date,
    		dossiers.date_envoi_devis,
    		dossiers.date_envoie_BAT,
    		dossiers.date_envoie_BAP,
    		dossiers.date_transmission_ADV,
    		dossiers.date_pour_facturer,
    		dossiers.date_facture,
    		dossiers.montant_facture,
    		dossiers.code_facture,
    		dossiers.date_fermeture,
    		dossiers.id_site_dev,
    		liste_site_dev.valeur
    	;
    J'ai mis en rouge ce qui correspond à ce que je veux faire
    J'obtiens comme erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     MySQL a répondu:Documentation
    #1241 - Operand should contain 1 column(s) 
    A quoi cela correspond t_il?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (select dossier_jalons.date
     FROM   dossier_jalons
     WHERE  dossiers.id_classe = 
        CASE id_direction
    		 WHEN  6 THEN 1
    		 WHEN  4 THEN 30
        END) AS J1
    Serait plus correct !

    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/ * * * * *

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 189
    Par défaut
    Merci beaucoup. J'ai vraiment compris comment ca fonctionnait.
    Par contre comme par exemple pour deux conditions je fait le meme choix.est ce que je peux faire un when multiple c'est à dire

    When (10,20) then 6

    ?

  7. #7
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    select case  when <valeur> in (10,20) then <val1> else <val2> end
    Bon courage

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 189
    Par défaut
    Merci beaucoup.

    J'ai fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    where dossier_jalons.id_direction=CASE dossiers.id_classe WHEN 1 OR 2 THEN 6 ELSE 4 END

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

Discussions similaires

  1. [VBA] BO Conditions de requetes avec VBA
    Par hlecleve dans le forum SDK
    Réponses: 4
    Dernier message: 01/06/2007, 10h10
  2. Réponses: 4
    Dernier message: 20/06/2006, 11h02
  3. Réponses: 9
    Dernier message: 01/06/2006, 14h12
  4. Condition sur requete pour Action MAcro
    Par hugo69 dans le forum Access
    Réponses: 4
    Dernier message: 12/10/2005, 12h24
  5. [MYSQL] conditions et requetes
    Par sebos63 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/02/2004, 16h41

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