synthaxe requète sql
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

synthaxe requète sql



  1. #1
    invite685917ef

    synthaxe requète sql


    ------

    bonjour,

    un appel à l'aide pour me sortir d'une requète que je n'arrive pas à construire. j'ai une base de données dans laquelle sont enregistrées mes opérations bancaires et j'ai besoin d'analyser mes dépenses par catégories et par mois sur un seul état, afin d'obtenir une seule vue les évolutions.
    j'ai donc une table dans laquelle se trouvent les champs
    ID, Date, Catégorie, Montant. comment s'écrit la requète qui va me donner toues les catégories avec la somme des opérations par catégories ?

    LA requètre suivante me dit que la sous-requète me renvoie plus d'un enregistrement !! ben oui forcément...

    SELECT categories.Nomcategorie, sum(ttall.montant) FROM ttall, categories
    where ttall.Nomcategorie=(SELECT distinct nomcategorie from categories)
    and substring(ttall.date,6,2)=02

    Merci pour votre aide

    -----

  2. #2
    ProgVal

    Re : synthaxe requète sql

    Bonjour,

    Effectivement, simple à dire, mais dur à faire
    J'utiliserai du PHP:
    Code PHP:
    <?php
    $cat_list_ressource
    =mysql_query("SELECT categorie FROM matable;");
    $cat_list=Array();
    while(
    $data=mysql_fetch_array($cat_list_ressource)
       
    $cat_list[]=$data['categorie'];
    $cat_list_and_sum=Array();
    for (
    $i=0$i<sizeof($cat_list); $i++)
    {
       
    $montant_ressource=mysql_query("SELECT SUM(montant) AS somme FROM matable WHERE categorie={$cat_list[$i]}");
       
    $montant=mysql_fetch_array($montant_ressource);
       
    $cat_list_and_sum[$cat_list[$i]]=$montant;
    }
    Ça devrait marcher, mais je n'ai pas de quoi tester

    Cordialement,
    ProgVal
    Dernière modification par ProgVal ; 02/05/2009 à 14h01. Motif: point-virgule oublié ><

  3. #3
    zoup1

    Re : synthaxe requète sql

    Citation Envoyé par ske Voir le message
    bonjour,

    un appel à l'aide pour me sortir d'une requète que je n'arrive pas à construire. j'ai une base de données dans laquelle sont enregistrées mes opérations bancaires et j'ai besoin d'analyser mes dépenses par catégories et par mois sur un seul état, afin d'obtenir une seule vue les évolutions.
    j'ai donc une table dans laquelle se trouvent les champs
    ID, Date, Catégorie, Montant. comment s'écrit la requète qui va me donner toues les catégories avec la somme des opérations par catégories ?

    LA requètre suivante me dit que la sous-requète me renvoie plus d'un enregistrement !! ben oui forcément...

    SELECT categories.Nomcategorie, sum(ttall.montant) FROM ttall, categories
    where ttall.Nomcategorie=(SELECT distinct nomcategorie from categories)
    and substring(ttall.date,6,2)=02

    Merci pour votre aide
    Cela devrait faire ce qu'il faut...

    select categories.nomcategory, sum(ttail.montant), from ttall, categorie where substring(ttail,date,6,2à=02 group by categories.nomcategorie
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  4. #4
    invite685917ef

    Re : synthaxe requète sql

    merci pour ta réponse progval,

    en fait , mon logiciel de banque c'est grisbi, il génère un fichier xml.
    ce fichier je le retraite sous forme de base de données Mysql avec Talend Open Studio.
    Pour attaquer la base de données, je vais certainement utiliser
    openreports..... Donc dans tout ça je ne vais pas pouvoir caser
    php (je suis archi nul en programmation ).

  5. A voir en vidéo sur Futura
  6. #5
    invite685917ef

    Re : synthaxe requète sql

    Merci Zoup1,

    j'ai effectivement dans mes divers essais fait cette requète :

    SELECT categories.Nomcategorie, sum(ttall.montant) FROM ttall, categories
    where Categories.NomCategorie=ttall. NomCategorie
    and substring(ttall.date,6,2)=02
    group by Categories.NomCategorie

    mais les résultats ne sont pas cohérents 2056 € pour la catégéorie "alimentation" pour le mois de février !!
    Peux-t-on faire
    a la fois un sum de montant et un group by des catégories. ?

  7. #6
    ProgVal

    Re : synthaxe requète sql

    Tu codes en SQL pur?
    Dernière modification par ProgVal ; 02/05/2009 à 15h26. Motif: ouh, l'orthographe!

  8. #7
    zoup1

    Re : synthaxe requète sql

    Tout cela dépend un peu de la façon dont tu te nourris...

    Je ne comprend pas vraiment pourquoi tu as besoin de la table categories dans tout cela..

    a priori
    select ttall.NomCategorie, sum(ttall.montant) from ttail where substring(ttall.date,6,2)="02" groupe by ttall.categorie devrait suffire.
    Est-ce que tu es sur que la façon dont tu fais la sélection sur les mois est suffisante ?
    Si tu ne fais pas le sum et donc pas le group by, est-ce que tu retrouves bien uniquement les enregistrements qui t'interessent. Si tu fais la somme à la main, cela donne quoi ?
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  9. #8
    cristolab

    Re : synthaxe requète sql

    Salut,

    La Requête de Zoup1 me semble bonne aussi !
    Si tu as un montant bien trop élevé et si tu es dur que ton mois est encodé du caractères 6 au caractère 7, alors il reste une solution : Tu as des catégories doublons dans ta table Catégories !
    Je ne veux pas juger, mais la table TTALL devrait avoir une référence à la table CATEGORIE autre que par son nom ! C'est plus pratique de faire une jointure entre ID (Unique) et dans ce cas la pas de problème de doublons.

    Code:
    ...
    WHERE
       TTALL.id_categorie=CATEGORIE.id
    ...
    SI tu ne peux plus modifier le schéma de ta base, il ne te reste plus qu'a néttoyer les doublons !

    Bon Courage

  10. #9
    invite685917ef

    Re : synthaxe requète sql

    J'utilise, peux-être à tort une table catégorie afin d'obtenir pour chaque mois le même nombre de catégories.
    le but etant de faire une analyse en mois glissant sur 12 mois.

    Donc si je ne me trompe pas, en faisant une jointure entre la table catégorie et la table ttall, je dois obtenir la liste de toutes les catégories
    quand bien même elle sont à 0.

    la requète suivante fonctionne mais j'ai un problème de type de données, les montants sont en type varcha(12) donc sans virgule
    a titre d'exemple pour la catégorie ''Alimentation' j'obtiens 514 en résultat de requète, Grisbi me donne 523.42, j'ai des écarts variables
    à chaque catégories. D'autre part cette requète renvoie uniquement les catégories utilisées


    select ttall.NomCategorie, cast(sum(ttall.montant) as char)
    from ttall
    where substring(ttall.date,6,2)='02' group by ttall.Nomcategorie.


    merci pour vos remarques, en effet j'ai un tas de doublon dans ma table catégorie, car chaque catégorie se décline en sous catégorie...
    d'ou les 2056 € en alimentation correspondant à 4 fois 514 !

    j'ai donc deux souci : 1 le type de données du champ montant
    2 : comment faire un distinct dans mon group by

    select ttall.NomCategorie, cast(sum(ttall.montant) as char)
    from ttall, categories
    where substring(ttall.date,6,2)='02'
    and ttall.nomcategorie=categories. Nomcategorie
    group by categories.Nomcategorie

  11. #10
    cristolab

    Re : synthaxe requète sql

    1 - Tu as mis ton cast à l'envers. Tu castes Ton Varchar2 en char, ca n'a pas grand intérêt... Je te propose plutot ca :

    Code:
    SELECT
       ttall.NomCategorie,
        sum(cast(ttall.montant) as float)
    FROM
    ...
    Mais le mieux est que tu change le type de ta colone montant :

    Code:
    ALTER TABLE ttall
    ALTER COLUMN montant float
    (à vérifier, mais dans l'idée c'est ca !)

    2 - Le Distinct dans ton cas ne servirait à rien : Ca sert juste à éviter les doublons, mais au niveau du Résultat ! Et avec ton Group By, tu as déjà regroupé par Nom de Catégorie !

    Je pense que tu aurais beaucoup moins de problème si en effet tes champs avaient des types adaptées à leur utilisation (Float pour le Montant, Integer (UNIQUE) pour l'ID de ta catégorie et pour la Clé Etrangère ID_CATEGORIE )

    Bon Courage

  12. #11
    zoup1

    Re : synthaxe requète sql

    Je ne comprends pas vraiment cette histoire de doublons. Que tu ais des sous catégories pourquoi pas, mais cela ne veut pas pour autant dire que le montant existe plusieurs fois dans ta base ?
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  13. #12
    invite685917ef

    Re : synthaxe requète sql

    Bonjour,


    Pourquoi les doublons : je dois impérativement lier chaque sous catégorie à sa catégorie, car les ID de sous catégorie vont de 1 à N Pour chaque catégorie, et leur numérotation se réinitialise à chaque catégorie. Je risque donc ( dans l'hypothèse d'une analyse par sous catégorie) de ne pas pouvoir faire de jointure sur les sous categ. Par exemple l' ID 1 est "heures sup" pour la cat salaire, mais aussi la sous cat "auto" de la cat assurance. J'ai donc reconstitué chaque
    lien Cat+SousCat

    détail de la table catégorie:

    NumCategorie NomCategorie TypeCategorie NumSousCategorie NomSousCategorie
    4 Salaire 0 1 Heures supplémentaires
    4 Salaire 0 2 Primes congés
    4 Salaire 0 3 Primes diverses
    4 Salaire 0 4 Primes résultats
    4 Salaire 0 5 Salaire net
    6 Alimentation 1 5 Divers
    6 Alimentation 1 7 Restaurant
    6 Alimentation 1 9 Supermarché
    6 Alimentation 1 10 Marché
    8 Assurance 1 1 Automobile
    8 Assurance 1 3 Habitation
    9 Automobile 1 1 Carburant
    9 Automobile 1 2 Réparation
    9 Automobile 1 3 Entretien
    9 Automobile 1 5 Amendes
    9 Automobile 1 6 Payages
    12 Enfants 1 1 Crèche / Nourrice / Ecole

    Pour ce qui concerne mon type de données Float pour montant, je galère, dans mon traitement Talend, impossible de le forcer à float , il le considère comme string !!

  14. #13
    zoup1

    Re : synthaxe requète sql

    Désolé, mais je ne comprends pas vraiment la structure de tes tables.
    Ce qu'il y a de clair, c'est que tu devrais lié ttall par un ID et non pas par le nom d'une catégorie.
    Tu ne veux pas nous mettre la structure complète de tes tables qu'on regarde ?
    A+
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  15. #14
    invite770d9cfe

    Re : synthaxe requète sql

    Je viens de faire un test sous Access qui fonctionne sans problème avec la requête suivante. J'ai nommé ma table "ttall" et utilisé le nom de tes propres champs. Le format de la date chez moi est dd/mm/yyyy (c'est le plus important). J'ai créé quelques postes de dépenses dont les factures téléphoniques.
    Tu ne devrais pas avoir de difficulté à adapter cette requête dans ton frontal qui devra scanner les postes de dépenses un à un pour un mois donné:

    Code:
    SELECT Sum(ttall.Montant) AS Total
    FROM ttall WHERE ttall.Catégorie="Téléphone" and mid(ttall.Date,4,2)="02";
    En sortie, Total donne la somme cumulée des dépenses téléphoniques du mois de février.

    Je vais en profiter pour pousser un coup de g.... à la maison, car ce poste, grâce à ma femme et à nos quatre filles installées aux quatre coins de la France, dépasse à lui seul le budget de notre vieille Xantia.

  16. #15
    invite685917ef

    Re : syntaxe requète sql

    bonjour , merci a tous pour vos conseils, j'ai bien avancé

    1 : type de données du champ montant est enfin en "Float"
    2 : j'ai refait mes champs de tables.
    2 : la requête suivante fonctionne les résultats sont fiables.

    select Tcat.nom, sum(operations.montant)
    from Tcat inner join operations on operations.categorie=Tcat.No
    where substring(operations.date,6,2) ='04'
    group by Tcat.nom;

    Il me reste un truc à gérer : Il me semblait qu'en faisant un select sur la table catégorie (puis jointure sur opération) j'obtiendrais 0 ou NULL pour les catégories non ventilées !! En fait elles n'apparaissent pas dans mon résultat de requête....
    une idée ?

  17. #16
    invite770d9cfe

    Re : synthaxe requète sql

    Tu nous avais dit qu'il n'y avait qu'une seule table. Si tu nous disais tout de A-Z, nous gagnerions du temps.

Discussions similaires

  1. [Divers] requete
    Par enebre dans le forum Dépannage
    Réponses: 0
    Dernier message: 25/01/2008, 20h58
  2. requête SQL
    Par inviteafd8fc22 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 07/01/2008, 16h02
  3. logiciel et requete sql
    Par bird12358 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 05/12/2007, 07h33
  4. Requete SQL
    Par invite4a3050ae dans le forum Internet - Réseau - Sécurité générale
    Réponses: 6
    Dernier message: 14/05/2004, 12h57
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...