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

MS SQL Server Discussion :

Récupération de résultat sous le format décimal


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Points : 15
    Points
    15
    Par défaut Récupération de résultat sous le format décimal
    Bonjour à tous,

    J'ai un petit soucis que je ne m'explique pas.
    Je veux avec une requête, faire un pourcentage de résultat.

    Pour cela je fait un Count(visible) pour obtenir le total des lignes en fonction d'un critère de visilité que je divise par un count(visible) global à la requête.

    Ex: * (SELECT COUNT(VISIBLE) FROM Stats WHERE VISIBLE = 1 AND SEMAINE=28 AND ANNEE=2006) ==> Résultat avec le critère de visibilité = 3
    * COUNT(VISIBLE) ==> Résultat de la requête principale = 8

    Le résultat de:

    ROUND ((SELECT COUNT(VISIBLE) FROM Stats WHERE VISIBLE = 1 AND SEMAINE=28 AND ANNEE=2006) * 100 / COUNT(VISIBLE), 2) AS Expr1

    Devrait donc être ==> 3*100/8 = 37,5 et au lieu de cela j'obtient 37.
    J'ai essayer avec et sans le ROUND.

    Voila un exemple de requête générer automatiquement:

    SELECT { fn CONCAT('S', LTRIM(STR(SEMAINE)))} AS SEMAINE,
    ROUND ((SELECT COUNT(VISIBLE) FROM Stats WHERE VISIBLE = 1 AND SEMAINE=28 AND ANNEE=2006) * 100 / COUNT(VISIBLE), 2) AS Expr1,
    ROUND ((SELECT COUNT(VISIBLE) FROM Stats WHERE VISIBLE = 2 AND SEMAINE=28 AND ANNEE=2006) * 100 / COUNT(VISIBLE), 2) AS Expr2,
    ROUND ((SELECT COUNT(VISIBLE) FROM Stats WHERE VISIBLE = 3 AND SEMAINE=28 AND ANNEE=2006) * 100 / COUNT(VISIBLE), 2) AS Expr3'
    FROM Stats WHERE (1 = 1) AND SEMAINE=28 AND ANNEE=2006 GROUP BY SEMAINE, ANNEE


    J'ai vraiment besoin d'aide. Je vous remercie d'avance,

    Amicalement,

    Christophe

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Comme ton opération ne comporte que des valeurs qui sont typées en entier, tout le résultat est évalué comme un entier. Il faut introduire un nombre à virgule dans tout ça.
    Ceci devrait faire l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ROUND ((SELECT COUNT(VISIBLE) FROM Stats WHERE VISIBLE = 1 AND SEMAINE=28 AND ANNEE=2006) * 100.00 / COUNT(VISIBLE), 2) AS Expr1
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  3. #3
    Membre à l'essai
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Merci rudib pour la réponse aussi rapide,
    mais je ne sais pas comment integrer un décimal dans mes résultat car
    Je dois recuperer un 1er total via mes requêtes imbriqués:

    (SELECT COUNT(VISIBLE) FROM Stats WHERE VISIBLE = 1 AND SEMAINE=28 AND ANNEE=2006)

    qui me donne un entier et ensuite je le divise avec le

    COUNT(VISIBLE)

    qui lui aussi me donne un entier. Je ne vois pas comment integrer un décimal alors que je fait que des compteurs de ligne.

  4. #4
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    As-tu essayé d'intégrer la modification donnée ? Est-ce que ça a résolu ton problème ?
    L'idée est de multiplier par 100.00, et non par 100, comme ça il y a au moins une valeur évaluée en réel.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  5. #5
    Membre à l'essai
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Je te remercie grandement rudib

    j'ai effectivement mis 100.00 et j'obtient les bons résultats.

    MERCI BEAUCOUP!

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 726
    Points
    52 726
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    l'utilisation des fonctions ODBC dans SQL Server est TRES dangereuses.

    Vous utilisez la fonction fn CONCAT...
    Cette fonction n'existe pas en MS SQL Server. Elle est interceptée par ODBC et ne pourra marcher que si vous restez en ODBC. A terme elle ne sera plus supportée. Elle oblige en outre deux exécutions successives de la même requête :
    1) au niveau SQL Server qui est incapable d'exécuter ces fonctions propres à ODBC, c'est pourquoi ces fontions sont situées dans une séquence d'échappement { }...
    2) ensuite au niveau d'ODBC sur le poste client.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT { fn CONCAT('S', 'A') } AS SandA
    Bref si vous voulez pourrir les performances de votre appli, et vous otez toute possibilité de portabilité (vers SQL Server 2005 / ADO par exemple) c'est ce qu'il faut faire.

    La concaténation dans SQL Server est bien plus facile que ce merdier... Il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 'S' + LTRIM(STR(SEMAINE)) AS SEMAINE
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT { fn CONCAT('S', LTRIM(STR(SEMAINE)))} AS SEMAINE, SandA
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. Enregistrer un fichier résultat sous format txt
    Par hananemto2007 dans le forum R
    Réponses: 3
    Dernier message: 19/02/2009, 15h16
  2. Réponses: 4
    Dernier message: 09/05/2007, 23h39
  3. Réponses: 3
    Dernier message: 20/10/2006, 09h36
  4. Réponses: 2
    Dernier message: 29/03/2006, 09h38
  5. Exporter sous un format jpeg
    Par Kuollu dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 02/05/2005, 10h29

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