1. #1
    Membre confirmé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    mai 2002
    Messages
    1 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : mai 2002
    Messages : 1 155
    Points : 587
    Points
    587

    Par défaut Ordre du CAST,COALESCE ET ROUND dans un SELECT

    Bonjour,

    Dans un SELECT j'utilise les fonctions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COALESCE(ROUND(CAST(SUM(CHAMP)AS NUMERIC(15,2)),2),0)  FROM TABLE
    Mise à part le CAST et le SUM qui me sont nécéssaires, que pensez-vous de rajouter le ROUND pour éviter la perte de décimal et le COALESCE pour éviter une donnée NULL. Es-ce que ce n'est pas trop lourd ou bien y-a-t-il mieux que ca ? Les fonctions sont-elles dans le bon ordre ?
    En vous remerciant.
    Le Savoir c'est le Pouvoir !
    S.Freud

  2. #2
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    3 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 3 642
    Points : 8 219
    Points
    8 219
    Billets dans le blog
    1

    Par défaut

    Bonjour,

    Quel est le type de la colonne à convertir ?

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    9 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 9 143
    Points : 20 911
    Points
    20 911
    Billets dans le blog
    9

    Par défaut

    Bonjour,

    déjà je mettrai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ROUND(CAST(SUM(COALESCE(CHAMP,0)AS NUMERIC(15,2)),2)  FROM TABLE
    ensuite je ne suis pas convaincu qu'il faille utiliser de CAST (après tout on a affaires avec des valeurs numériques pour le SUM donc je réduirai en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ROUND(SUM(COALESCE(CHAMP,0),2)  FROM TABLE
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  4. #4
    Membre confirmé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    mai 2002
    Messages
    1 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : mai 2002
    Messages : 1 155
    Points : 587
    Points
    587

    Par défaut

    Bonjour tout le monde,

    Citation Envoyé par escartefigue
    Quel est le type de la colonne à convertir ?
    Le champ est de type NUMERIC(15,4)

    Citation Envoyé par SergioMaster
    SELECT ROUND(CAST(SUM(COALESCE(CHAMP,0)AS NUMERIC(15,2)),2) FROM TABLE
    Alors c'est l'inverse que j'ai fait.

    SergioMaster, je me fie à votre à longue experience sur FB en optant pour la 2eme solution

    SELECT ROUND(SUM(COALESCE(CHAMP,0),2) FROM TABLE
    Merci !
    Le Savoir c'est le Pouvoir !
    S.Freud

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    9 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 9 143
    Points : 20 911
    Points
    20 911
    Billets dans le blog
    9

    Par défaut

    Citation Envoyé par freud Voir le message
    SergioMaster, je me fie à votre à longue experience sur FB en optant pour la 2eme solution
    C'est gentil mais j'ai écrit ça avant de lire qu'il s'agissait d'un champ NUMERIC(15,4) tout dépend donc de ce que vous voulez faire avec l'arrondi un petit test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE TEST (CHAMP NUMERIC(15,4));
    INSERT INTO TEST (CHAMP) VALUES (15.2541);
    INSERT INTO TEST (CHAMP)  VALUES (13.2532);
    INSERT INTO TEST (CHAMP) VALUES (11.4549);
    INSERT INTO TEST (CHAMP) VALUES (NULL);

    SELECT ROUND(SUM(COALESCE(CHAMP,0)),2) FROM TEST arrondi après somme = 39.9600
    SELECT SUM(ROUND(COALESCE(CHAMP,0),2)) FROM TEST arrondi avant somme = 39.9500

    vous remarquerez alors que
    1- SUM d'un NUMERIC(15,4) renvoi un NUMERIC(15,4)
    2- la position de l'arrondi change la donne
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  6. #6
    Membre confirmé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    mai 2002
    Messages
    1 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : mai 2002
    Messages : 1 155
    Points : 587
    Points
    587

    Par défaut

    Ah oui, j'aurais dû préciser le type de champ.

    La 1ere variante du SELECT me convient parfaitement afin d’éviter la perte de centimes et supposerais que le CAST serait inutile puisque le ROUND fait le travail. Mais c'est bon à savoir que la position du ROUND donne un résultat différent.
    Encore merci SergioMaster.
    Le Savoir c'est le Pouvoir !
    S.Freud

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/03/2009, 09h53
  2. [Java] cast de classe Java dans une fonction Matlab
    Par steph_ch dans le forum MATLAB
    Réponses: 1
    Dernier message: 14/04/2008, 15h55
  3. Ordre des données dans un select
    Par Kiroukool dans le forum SQL
    Réponses: 1
    Dernier message: 03/07/2007, 08h48
  4. l'ordre des lignes dans un Select
    Par comment_ca dans le forum Oracle
    Réponses: 15
    Dernier message: 05/10/2006, 11h08
  5. Réponses: 6
    Dernier message: 12/09/2006, 18h25

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