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

SQLite Discussion :

condition if then else dans un select


Sujet :

SQLite

  1. #1
    Membre habitué Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 137
    Points
    137
    Par défaut condition if then else dans un select
    bonjour,

    je souhaiterais créer une condition de selection dans une requete select en vu de réaliser du publipostage.

    Est- ce que c'est possible ? Si oui, comment faire ?

    voici ma requete à ce jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT T_APPRENTI.NOM_STAG, T_APPRENTI.PRENOM_STAG, TJ_APP_PCS.ETAT_PCS, T_PIECE_DOSSIER.NOM_PCS, CALENDRIER
    FROM T_APPRENTI INNER JOIN TJ_APP_PCS
    ON T_APPRENTI.MATR_STAG=TJ_APP_PCS.MATR_STAG
    INNER JOIN T_PIECE_DOSSIER ON
    TJ_APP_PCS.ID_PCS=T_PIECE_DOSSIER.ID_PCS
    WHERE T_APPRENTI.MATR_STAG='00201009'
    AND ETAT_PCS=0
    AND PCS_OBLIG=1
    AND ANNEE_PRES_PCS IN (2,3)
    ORDER BY ORDRE
    Avec la condition : si le premier caractere de CALENDRIER vaut 1 alors selectionner ANNEE_PRES_PCS in (1,3) sinon selectionner ANNEE_PRES_PCS in (2,3)

    Merci beaucoupp de votre aide

  2. #2
    Membre habitué Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 137
    Points
    137
    Par défaut
    bonjour,

    je me réponds à moi même car au vu du nombre de consultations sans réponse, il y a plusieurs hypothèses :
    1 - la question n'a aucun sens et ça ne vaut pas le coup de répondre
    2 - personne de sait comment faire ou c'est impossible avec SQL ou sqlite
    3 - possible, mais trop compliqué à réaliser, de toute façon, ce n'est pas un travail de SGBDR

    Dans tous les cas, il faut que j'avance. Je vais donc coder ce problème dans mon application python du mieux possible.

    Merci quand même, ne serait ce que d'avoir pris le temps de visualiser le message.

  3. #3
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Hier soir , j’avais commencé de regarder ton problème de près , et puis j’ai abandonné parce que:
    - je n’ai acquis les rudiments de SQLite que tout récemment à la suite d’une question qui a piqué ma curiosité dans le forum Python
    - je m’étais plongé dans les arcanes du document sur les expressions utilisables dans un statement SELECT pour essayer de construire la condition que tu demandes, mais la docu du site SQLite me rebute et je me suis senti dépassé
    - j’avais quelques idées sur la manière d’exprimer ta condition en Python, mais je ne savais pas si tu allais pouvoir l’utiliser ou l’adapter à un autre langage

    Mais comme tu précises dans ce second message que tu utilises Python, alors me revoili.
    Si tu utilises SQLite3 via des execute() dans un code Python, alors voilà une façon de résoudre ton problème je crois:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    x = 1+(CALENDRIER[0]!='1')
    connex = sqlite3('base')
    curs = connex.cursor()
    curs.execute("SELECT T_APPRENTI.NOM_STAG, T_APPRENTI.PRENOM_STAG, TJ_APP_PCS.ETAT_PCS, T_PIECE_DOSSIER.NOM_PCS, CALENDRIER "
              "FROM T_APPRENTI INNER JOIN TJ_APP_PCS "
              "ON T_APPRENTI.MATR_STAG=TJ_APP_PCS.MATR_STAG "
              "INNER JOIN T_PIECE_DOSSIER ON "
              "TJ_APP_PCS.ID_PCS=T_PIECE_DOSSIER.ID_PCS "
              "WHERE T_APPRENTI.MATR_STAG='00201009' "
              "AND ETAT_PCS=0 "
              "AND PCS_OBLIG=1 "
              "AND ANNEE_PRES_PCS IN (%s,3) "
              "ORDER BY ORDRE " % x)
    Explication
    Ça utilises le fait que pour Python False et 0 c’est pareil, et que True et 1 c’est pareil.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CALENDRIER = '1 Fevrier 2009'
    print "CALENDRIER = '1 Fevrier 2'"
    print "CALENDRIER commence par '1' --> ANNEE_PRES_PCS doit etre dans (1,3)"
    for ANNEE_PRES_PCS in (1+(CALENDRIER[0]!='1'),3):
        print ANNEE_PRES_PCS
     
    print
     
    CALENDRIER = '23 Mars 2009'
    print "CALENDRIER = '23 Mars 2009'"
    print "CALENDRIER  ne commence pas par '1' --> ANNEE_PRES_PCS doit etre dans (2,3)"
    for ANNEE_PRES_PCS in (1+(CALENDRIER[0]!='1'),3):
        print ANNEE_PRES_PCS




    Ceci dit, le peu que j’ai vu de SQLite me donne à penser que ce n’est pas un très bon SGBD. Peut être allégé par rappot à d’autres = Lite ? Mais en tous cas, pas plus simple pour autant. D’ailleurs il n’y est consacré qu’un sous-forum sur developpez.com

    Donc est-ce que ça vaut vraiment la peine de ramer à utiliser SQLite, qui me semble lourdingue (bugs, docu indigeste, complexité des statements...) au lieu d’apprendre un autre SGBD ?

    Est-ce que tu utilises SQLite depuis peu ou longtemps ? Le sujet m’intéresse parce qu’il va falloir que je choisisse un SGBD un de ces 4 matins.

    Salut.

  4. #4
    Membre habitué Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 137
    Points
    137
    Par défaut
    bonjour eyquem

    merci d'avoir répondu au topic. Pour la derniere question : non, je n'utilise pas sqlite depuis trés longtemps. On m'a demandé si je pouvais développé une appli qui gères les pieces d'un dossier d'inscription (piece fournie ou non) pour les secrétaires au boulot. Le développement n'est pas mon boulot est je fait ça que par gout et envie de dévélopper, et en plus du taff normal bien sur.
    L'appli en question ne comporte que 4 tables, donc je me suis dit que sqlite ou gadfly pouvais largement répondre au problème, ce qu' sqlite à fait. L'appli tourne aujourd'hui et j'en suis à développer le module export de données en vu de générer du publipostage (courrier de relance), d'ou ma problématique.
    Je m'aperçoit maintenant que ce n'ai pas si évident car les requetes deviennent assez rapidement complexes et je voudrait créer les états avec un systeme de fichier suffisament générique, pour que l'on ne vienne pas me demander tout les matin de rajouter un état "en dur" dans le code.

    Le code que tu me fournis est déja interressant, de mon coter, j'ai commencer à developper du code dans mon executable pour pouvoir tester ce genre de condition.
    Je vais regader de près tout cela.

    P.S. petite precision : calendrier ici veut dire section. D'où la requete conditionnelle qui dit que si le 1er caracter de la section vaut 1 (1ere année) alors ..., sinon ... Avec sinon, si 1ere caractere vaut 2 pour 2eme année.
    Mais ca, c'est du jargon purement lié au métier.

  5. #5
    Membre habitué Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 137
    Points
    137
    Par défaut
    eyquem, en fin de compte, j'ai trouvé une solution de remplacement en SQL "sqlite"

    je transmets le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT  ... FROM ... WHERE KEYWHERE ... AND ANNEE_PRES_PCS IN ((SELECT SUBSTR(CALENDRIER,1,1) FROM T_APPRENTI WHERE KEYWHERE ),3 )
    ou KEYWHERE est une variable que je donne au travers d'un module SQL_generator, qui me genere une chaine sql en fonction de différents elements que je transmet en arguments.

    Salutations
    bringer

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Je ne sais pas si SQLite implémente le LIKE pour selectionner les lignes. Mais si c'est le cas, tu pourrais faire ton action en 2 temps:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT ....
    FROM ....
    WHERE calendrier LIKE "1%"
    AND ANNEE_PRES_PCS IN (1,3)
     
     
    UNION 
     
    SELECT ...
    FROM
    WHERE calendrier NOT LIKE "1%"
    AND ANNEE_PRES_PCS IN (2,3)
    ORDER BY ....

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

Discussions similaires

  1. [Vxi3] Condition If . then . else discard
    Par Marshall06 dans le forum Deski
    Réponses: 4
    Dernier message: 29/04/2011, 13h59
  2. condition if then else en jsf
    Par tongo dans le forum JSF
    Réponses: 2
    Dernier message: 06/08/2009, 16h57
  3. IF THEN ELSE dans 1 requête
    Par patjaff dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/10/2008, 16h43
  4. if then else dans un select
    Par Fiona08 dans le forum SQL
    Réponses: 8
    Dernier message: 12/08/2008, 15h14
  5. fonction if/then/else dans une requete Access
    Par steve38 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/12/2006, 17h09

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