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 :

Calcul dynamique des créances par périodes


Sujet :

SQLite

  1. #1
    Membre régulier
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Points : 92
    Points
    92
    Par défaut Calcul dynamique des créances par périodes
    Bonjour,

    Je voudrais, par la requête ci-dessous, calculer d'une manière dynamique, le montant des factures selon leurs ages et afficher le résultat sous forme de colonnes (p1, p2, etc. ...)

    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
     
     
    SELECT compte_client, 
    SUM(CASE WHEN strftime('%Y', date_facturation) = p1 THEN montant_facture ELSE 0 END) AS p1, 
    SUM(CASE WHEN strftime('%Y', date_facturation) = p2 THEN montant_facture ELSE 0 END) AS p2,
    SUM(CASE WHEN strftime('%Y', date_facturation) = p3 THEN montant_facture ELSE 0 END) AS p3,
    SUM(CASE WHEN strftime('%Y', date_facturation) = p4 THEN montant_facture ELSE 0 END) AS p4,
    SUM(CASE WHEN strftime('%Y', date_facturation) <= p5 THEN montant_facture ELSE 0 END) AS p5,
    round(sum(montant_facture),2) as montant_total
    FROM tmp_creances_clients, 
    (SELECT strftime('%Y',current_date) -1 AS p1,  
    		strftime('%Y',current_date) -2 AS p2, 
    		strftime('%Y',current_date) -3 AS p3, 
    		strftime('%Y',current_date) -4 AS p4, 
    		strftime('%Y',current_date) -5 AS p5) AS an   
    GROUP BY 1
    ORDER BY 1
    Seulement, le tableau est vide à l'exception du montant total.

    Nom : resultat.jpg
Affichages : 126
Taille : 34,0 Ko

    Je demande votre aide pour résoudre ce problème.
    Merci.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 439
    Points : 1 142
    Points
    1 142
    Par défaut
    Bonjour,

    Après quelques recherches, j'ai pu obtenir des réslutats comme ceci :

    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
    SELECT compte_client,
    SUM(CASE WHEN cast(strftime('%Y', date_facturation) as integer) = p1 THEN montant_facture ELSE 0 END) AS p1,
    SUM(CASE WHEN cast(strftime('%Y', date_facturation) as integer) = p2 THEN montant_facture ELSE 0 END) AS p2,
    SUM(CASE WHEN cast(strftime('%Y', date_facturation) as integer) = p3 THEN montant_facture ELSE 0 END) AS p3,
    SUM(CASE WHEN cast(strftime('%Y', date_facturation) as integer) = p4 THEN montant_facture ELSE 0 END) AS p4,
    SUM(CASE WHEN cast(strftime('%Y', date_facturation) as integer) <= p5 THEN montant_facture ELSE 0 END) AS p5,
    round(sum(montant_facture),2) as montant_total
    FROM tmp_creances_clients,
    (SELECT strftime('%Y',current_date) -1 AS p1,
    		strftime('%Y',current_date) -2 AS p2,
    		strftime('%Y',current_date) -3 AS p3,
    		strftime('%Y',current_date) -4 AS p4,
    		strftime('%Y',current_date) -5 AS p5) AS an
    GROUP BY 1
    ORDER BY 1
    en fait en forçant une comparaison entière sur l'année.

    avec une table comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE [tmp_creances_clients] ([compte_client] NUMERIC NULL,
    [date_facturation] DATE NULL,
    [montant_facture] NUMERIC NULL,
    PRIMARY KEY ([compte_client], [date_facturation]))
    avec des données comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO [tmp_creances_clients] (compte_client, date_facturation, montant_facture) VALUES (12001, '2022-12-15', 125.25);
    INSERT INTO [tmp_creances_clients] (compte_client, date_facturation, montant_facture) VALUES (12001, '2021-12-15', 135.2);
    INSERT INTO [tmp_creances_clients] (compte_client, date_facturation, montant_facture) VALUES (12001, '2020-12-15', 152.2);
    J'obtiens
    12001|125.25|135.2|152.2|0|0|412.65
    dans l'interface sqlite3 Je crois que c'est ce que tu voulais...
    Cordialement

  3. #3
    Membre régulier
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Points : 92
    Points
    92
    Par défaut
    Merci acaumes,

    Le tableau ce rempli des données mais il y a un bémol, l'entête du tableau contient les variables p1, p2, etc.
    Y a t'il pas une possibilité d'avoir les noms des entêtes 2022, 2021, 2020 etc. ??? en fonction de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (SELECT strftime('%Y',current_date) -1 AS p1,
    		strftime('%Y',current_date) -2 AS p2,
    		strftime('%Y',current_date) -3 AS p3,
    		strftime('%Y',current_date) -4 AS p4,
    		strftime('%Y',current_date) -5 AS p5)
    Merci.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    439
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 439
    Points : 1 142
    Points
    1 142
    Par défaut
    J'ai essayé diverses choses mais je crois que c'est difficile sinon impossible car pour SQLITE ce que tu as là c'est du texte (tel que décrit dans la grammaire formelle SQLITE)

    Pour le reste, j'ai regardé le type retourné dans les expressions et on obtient texte pour "strftime('%Y', date_facturation)" et entier pour "p1".

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/06/2021, 09h56
  2. Réponses: 0
    Dernier message: 25/08/2014, 16h06
  3. Grouper des résultats par période du jour
    Par Nuwanda dans le forum Langage SQL
    Réponses: 17
    Dernier message: 10/03/2008, 19h33
  4. Faire des moyennes par période
    Par Nessie37 dans le forum Requêtes et SQL.
    Réponses: 27
    Dernier message: 23/08/2007, 11h39

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