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 :

résultat en numeric et non en BigInt


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 246
    Points : 123
    Points
    123
    Par défaut résultat en numeric et non en BigInt
    Salut à toutes et à tous,

    Voici ma requête SQL :
    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
     
    SELECT 	"TblSecteurs"."TblSecteurs_ID" AS "PPArrieresParSecteurs_SecteurID", 
    	count("TblIntermediairePPSecteurs"."TblIntermediairePPSecteurs_PPID") AS "PPArrieresParSecteurs_NbrPPArrieres", 
    	"NbrPPParSecteur"."NbrPPParSecteurs_NbrPPParSecteur",
    	CASE "NbrPPParSecteur"."NbrPPParSecteurs_NbrPPParSecteur" 
    		WHEN 0 
    			THEN 0 
    			ELSE count("TblIntermediairePPSecteurs"."TblIntermediairePPSecteurs_PPID")/"NbrPPParSecteur"."NbrPPParSecteurs_NbrPPParSecteur" 
    		END AS "NbrPPParSecteur_PourcentagePPArrieres"
    FROM "TblSecteurs"
      LEFT JOIN "TblIntermediairePPSecteurs" ON "TblSecteurs"."TblSecteurs_ID" = "TblIntermediairePPSecteurs"."TblIntermediairePPSecteurs_SecteurID"
      LEFT JOIN "TblPP" ON "TblPP"."TblPP_ID" = "TblIntermediairePPSecteurs"."TblIntermediairePPSecteurs_PPID"
      LEFT JOIN "NbrPPParSecteur" ON ("NbrPPParSecteur"."NbrPPParSecteurs_SecteurID" = "TblIntermediairePPSecteurs"."TblIntermediairePPSecteurs_SecteurID")
    WHERE COALESCE("TblPP"."TblPP_Graphique", true) = true AND COALESCE("TblPP"."TblPP_PPArriere", true) = true
    GROUP BY "TblSecteurs"."TblSecteurs_ID", "TblSecteurs"."TblSecteurs_NbrLots", "NbrPPParSecteur"."NbrPPParSecteurs_NbrPPParSecteur"
    ORDER BY "TblSecteurs"."TblSecteurs_ID";
    Elle fonctionne presque bien, ou plutôt me retourne presque ce que j'attend.

    En effet, elle me retourne bien le calcul (enfin, je pense) qui divise 2 count (donc 2 BigInt), mais elle me le retourne en BigInt (ce qui est logique en soi) et je perd les décimales. Or il me les faut.
    Comment puis-je obtenir un résultat en numeric ou tout autre type me permettant des décimales, sachant qu'il est correct que les 2 champs d'origine soient des entiers ?
    (En fait je divise un nombre de points graphiques par un nombre de points graphiques arrières afin d'obtenir le pourcentage de point graphiques arrières par rapport à tous les points).

    La requête est destinée à devenir une vue sous PostgreSQL, tout comme NbrPPParSecteurs l'est déjà.

    Merci de vos z'avis z'avisés,
    Jean-Marc

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Il faut que tu cast tes éléments,
    Si tu veux a/b avec des décimales, il faut faire quelque chose comme
    cast(a as decimal(10,2)) /cast(b as decimal(10,2))

    Ou choisir le type de données qui te convient.

    A+
    Soazig

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 246
    Points : 123
    Points
    123
    Par défaut
    C'est même très exactement ça.
    Merci.

    Cela donne 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 	"TblSecteurs"."TblSecteurs_ID" AS "PPArrieresParSecteurs_SecteurID", 
    	count("TblIntermediairePPSecteurs"."TblIntermediairePPSecteurs_PPID") AS "PPArrieresParSecteurs_NbrPPArrieres", 
    	"NbrPPParSecteur"."NbrPPParSecteurs_NbrPPParSecteur",
    	CASE "NbrPPParSecteur"."NbrPPParSecteurs_NbrPPParSecteur" 
    		WHEN 0 
    			THEN 0 
    			ELSE cast(count("TblIntermediairePPSecteurs"."TblIntermediairePPSecteurs_PPID") AS numeric)/cast("NbrPPParSecteur"."NbrPPParSecteurs_NbrPPParSecteur" AS numeric)
    		END AS "NbrPPParSecteur_PourcentagePPArrieres"
    FROM "TblSecteurs"
      LEFT JOIN "TblIntermediairePPSecteurs" ON "TblSecteurs"."TblSecteurs_ID" = "TblIntermediairePPSecteurs"."TblIntermediairePPSecteurs_SecteurID"
      LEFT JOIN "TblPP" ON "TblPP"."TblPP_ID" = "TblIntermediairePPSecteurs"."TblIntermediairePPSecteurs_PPID"
      LEFT JOIN "NbrPPParSecteur" ON ("NbrPPParSecteur"."NbrPPParSecteurs_SecteurID" = "TblIntermediairePPSecteurs"."TblIntermediairePPSecteurs_SecteurID")
    WHERE COALESCE("TblPP"."TblPP_Graphique", true) = true AND COALESCE("TblPP"."TblPP_PPArriere", true) = true
    GROUP BY "TblSecteurs"."TblSecteurs_ID", "TblSecteurs"."TblSecteurs_NbrLots", "NbrPPParSecteur"."NbrPPParSecteurs_NbrPPParSecteur"
    ORDER BY "TblSecteurs"."TblSecteurs_ID";

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

Discussions similaires

  1. [MySQL] variable résultat de la requête non renseignée
    Par Invité dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 14/09/2011, 06h02
  2. Réponses: 7
    Dernier message: 21/05/2010, 17h36
  3. résultat d'un update non attendu
    Par the_frogkiller dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/07/2009, 11h43
  4. [SQL] Résultat de fonction php non valide dans requête SQL
    Par darksnake dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/12/2007, 14h44
  5. Réponses: 3
    Dernier message: 24/04/2006, 17h32

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