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 Firebird Discussion :

Transformer une requête en vue


Sujet :

SQL Firebird

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut Transformer une requête en vue
    Bonjour,

    J'ai créé la requête, ci-après, pour être utilisée avec Firebird version 2.1.4. L'objectif est de présenter en colonne l'échéance des factures. Cette affichage doit se faire pour 8 décades. La difficulté principale est de traiter les décades de fin mois qui peuvent être 31/01, 29/02 et 31/03.

    Pour cela, je fais l'ajustement dans l'applicatif et transmets par paramètres les valeurs à la requête.

    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
    WITH w_Enc AS (
      SELECT C.FACT_ID,
        SUM(ECRIT_D_C * ECRIT_VALEUR) AS vEnc
      FROM ENCAISSER C
        LEFT JOIN ECRITURE E ON E.ECRIT_COMPT = 1 AND C.ECRIT_ID = E.ECRIT_ID
      GROUP BY C.FACT_ID
    ),
    w_Solde AS (
      SELECT F.FACT_ID, FACT_TTC - COALESCE(vEnc, 0) AS vSolde
      FROM FACTURE F
        LEFT JOIN w_Enc R ON F.FACT_ID = R.FACT_ID
    )
    SELECT CLIENT_NUM, CLIENT_CHANT, FACT_NUM, FACT_ECH, FACT_TTC, COMMENT_LIB,
      CASE WHEN FACT_ECH <= :pDate1 THEN vSolde END AS vMont_0,
      CASE WHEN FACT_ECH BETWEEN :pDate1 AND :pDate_01 THEN vSolde END AS vMont_1,
      CASE WHEN FACT_ECH BETWEEN :pDate_01 + 1 AND :pDate_02 THEN vSolde END AS vMont_2,
      CASE WHEN FACT_ECH BETWEEN :pDate_02 + 1 AND :pDate_03 THEN vSolde END AS vMont_3,
      CASE WHEN FACT_ECH BETWEEN :pDate_03 + 1 AND :pDate_04 THEN vSolde END AS vMont_4,
      CASE WHEN FACT_ECH BETWEEN :pDate_04 + 1 AND :pDate_05 THEN vSolde END AS vMont_5,
      CASE WHEN FACT_ECH BETWEEN :pDate_05 + 1 AND :pDate_06 THEN vSolde END AS vMont_6,
      CASE WHEN FACT_ECH BETWEEN :pDate_06 + 1 AND :pDate_07 THEN vSolde END AS vMont_7,
      CASE WHEN FACT_ECH BETWEEN :pDate_07 + 1 AND :pDate_08 THEN vSolde END AS vMont_8
    FROM FACTURE F
      INNER JOIN CLIENT C ON F.CLIENT_ID = C.CLIENT_ID
      INNER JOIN w_Solde S ON F.FACT_ID = S.FACT_ID
      LEFT JOIN COMMENT T ON F.FACT_ID = T.FACT_ID
    WHERE F.FACT_ARCH = 0 AND vSolde <> 0 AND F.FACT_ECH <= :pDate_08 ORDER BY CLIENT_NUM
    Tous ceci fonctionne parfaitement et me donne le résultat souhaité.

    Question

    Mon interrogation est comment transformer cette requête dans une VUE, car il n'est pas possible de passer les paramètres fin de décade.

    La mise en œuvre d'une procédure stockée serait-elle plus appropriée ?

    Il n'est pas interdit de modifier ma requête pour lui permettre de la transformer dans une vue.

    Je remercie d'avance tous ceux qui pourront m'aider à résoudre ma difficulté.

    Editer à 9 h 22
    Après réflexion, la solution passe peut être par la création d'une table qui enregistrerait les dates de fin de décade.

    Merci pour les conseils que vous pouvez me donner vers cette piste ou tout autre.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    @Cinephil

    Il me semble dommage d'avoir déplacé ma discussion de la section SGBD -SQL vers Firebird.

    Ma difficulté n'est pas créer une vue, mais de voir comment rédiger la requête autrement pour qu'elle puisse être transformée en vue. Tout cela en SQL standard.

    La précision d'utilisation de Firebird était simplement pour éviter d'obtenir une réponse avec des instructions qui ne sont pas présentent dans le serveur employé. Exemple 'decade' qui existe dans PostgreSQL, mais pas dans Firebird

    Il serait bien de la replacer dans la section SGBD - SQL

    Pour compléter ma demande, est-il possible de présenter la requête d'une manière différente pour qu'elle puisse être transformée en une vue

    D'avance merci

  3. #3
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    decade dans postgresql c'est
    The year field divided by 10
    et toi ta définition d'une décade c'est quoi exactement ?
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    @makowski

    Merci de vous intéresser à ma demande.

    Effectivement, la notion de décade peut avoir plusieurs interprétations. Pour moi, il s'agit de la décade habituellement utilisée dans le monde de la finance.

    Dans cette approche, chaque mois comporte 3 décades qui vont du 1 au 10 du mois (1ère décade), du 11 au 20 du mois (2ème décade) et du 21 à la fin du mois (3ème décade).

    Or, cette troisième décade est variable suivant le mois. En janvier 2012, elle aura 11 jours, en février 2012, elle sera de 9 jours alors qu'elle était de 8 jours pour février 2011.

    Je n'ai pas réussi à trouver une méthode pour assurer un découpage conforme à la décade financière. C'est pour cette raison que j'ai écrit la requête présentée dans mon précédent message.

    Elle répond à mes attentes, mais j'aurai préféré, pour des raisons internes à l'entreprise, pourvoir transformer cette requête en vue. Maintenant, si cela n'est pas possible, nous resterons en l'état.

    Je peux également envisager une procédure stockée. Mais je ne mesure pas les avantages et inconvénients par à une vue.

    J'aimerais bien obtenir un ou deux avis pour me fixer dans mon choix définitif. Peut-être que je me complique la vie pour rien.

    D'avance merci à ceux qui sont en mesure de m'aider.

  5. #5
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    pour avoir la decade d'une date (numéroté de 1 à 3) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MINVALUE((((EXTRACT(DAY FROM DATE '31.01.2012')-1)/10)+1),3)  FROM RDB$DATABASE
    pour avoir la decade d'une date (numéroté de 1 à 36)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MINVALUE((((EXTRACT(DAY FROM DATE '31.12.2012')-1)/10)+1),3)+(3*(EXTRACT(MONTH FROM DATE '31.12.2012')-1)) FROM RDB$DATABASE
    donc juste avec une date, on peut avoir sa décade

    du coup, tu dois pouvoir réécrire ta requête
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    @makowski

    Je te remercie pour les modèles qui vont me permettre de transformer mes dates en décade.

    Je vais revoir ma requête en conséquence, je présenterai le résultat après réalisation.

    Hier matin, en me rasant "Certains pensent à devenir président de la république d'autres réfléchissent comme modifier une requête SQL. A chacun son centre d'intérêt", je m'étais dit qu'il fallait passer EXTRACT. Étant absent, je n'avais rien vérifier. Hier soir, j'ai découvert ta réponse.

    Encore merci

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Je considère ce problème comme résolu pour l'instant.

    J'ai actuellement une requête qui fonctionne parfaitement. Je n'ai donc pas fait de transformation en vue.

    Je reprendrai ce point plus tard, lorsque le développement en cours sera terminé. Si j'ai besoin d'aide je reviendrai

    Merci à tous ceux qui m'ont aidé.

    A+

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/05/2010, 11h34
  2. transformer une requête
    Par mongilotti dans le forum SQL
    Réponses: 5
    Dernier message: 26/04/2010, 10h14
  3. Transformer une requête en chaîne de caractères
    Par DurDur dans le forum VBA Access
    Réponses: 1
    Dernier message: 14/03/2009, 18h40
  4. Transformer une requête sql dynamique
    Par ttttnht dans le forum Sybase
    Réponses: 5
    Dernier message: 24/07/2007, 07h54
  5. Transformer une requête imbriquée
    Par cans38 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 16/07/2007, 20h04

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