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 :

Calcul écarts sur montants en décimales [2008]


Sujet :

MS SQL Server

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Points : 0
    Points
    0
    Par défaut Calcul écarts sur montants en décimales
    Bonjour, je dois mettre sous SQL un contrôle en prenant en compte les arrondis. En pj vous trouverez la description détaillé de la problématique et la règle de calcul a mettre en place.

    Je ne vois pas trop la solution.


    Merci de vos retours

    Teddy
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Ce n'est pas très compliqué : en une seule requête SQL vous pouvez arrondir, calculez les écarts et réaffecter le différentiel à l'écart max à l'aide d'un CASE ou d'une jointure externe....

    Démo :

    la table et ses valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE T
    (ID        INT IDENTITY PRIMARY KEY,
     VALEUR    DECIMAL(16,2) NOT NULL);
    GO
     
    INSERT INTO T VALUES
    (9750), (5475), (2425); 
    GO
    La requête décomposée en CTE :

    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
    WITH 
    T_ARRONDI AS
    (SELECT *, ROUND(VALEUR/1000, 0) AS VALEUR_KEUROS, 
            ROUND(SUM(VALEUR) OVER() /1000, 0) AS TOTAL_KEUROS
     FROM   T),
    T_ECART AS
    (SELECT *, ABS(VALEUR - VALEUR_KEUROS * 1000) AS ECART_VALEUR,
            TOTAL_KEUROS - SUM(VALEUR_KEUROS) OVER() AS ECART_TOTAL
     FROM   T_ARRONDI),
    T_ECART_RANG AS
    (SELECT ID, ECART_VALEUR, RANK() OVER(ORDER BY ECART_VALEUR DESC) AS RANG,
            COUNT(*) OVER(PARTITION BY ECART_VALEUR) AS NOMBRE 
     FROM   T_ECART)
    SELECT E.ID, VALEUR, VALEUR_KEUROS + COALESCE(ECART_TOTAL / NOMBRE, 0)  AS TOTAL_KEUROS_RECTIFIE
    FROM   T_ECART AS E
           LEFT OUTER JOIN T_ECART_RANG AS ER
                 On E.ID = ER.ID AND RANG = 1
    Elle règle le cas ou il y a deux valeurs ex æquo candidates à la rectification....


    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/ * * * * *

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Points : 0
    Points
    0
    Par défaut Sur SQL Server 2008 ne fonctionne pas
    Bonjour merci bp de votre retour, mais lorsqu'on travaille sur la version SQL server 2008 cela ne fonctionne pas, en effet j'ai le message ci-dessous

    Msg*156, Niveau*15, État*1, Ligne*3
    Syntaxe incorrecte vers le mot clé 'WITH'.
    Msg*156, Niveau*15, État*1, Ligne*5
    Syntaxe incorrecte vers le mot clé 'OVER'.
    Msg*156, Niveau*15, État*1, Ligne*9
    Syntaxe incorrecte vers le mot clé 'OVER'.
    Msg*195, Niveau*15, État*10, Ligne*12
    'RANK' n'est pas un nom de fonction reconnu.
    Msg*156, Niveau*15, État*1, Ligne*24
    Syntaxe incorrecte vers le mot clé 'OVER'.

    Merci de votre retour

    Teddy

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Points : 0
    Points
    0
    Par défaut Version SQL
    Merci bp mais je suis visiblement sur une version ancienne pas SQL Server 2008, du coup les fonctions over et rank ne sont pas reconnues.

    Avez vous d'autres idées ?

    Merci de votre retour

    Teddy

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ça serait pas plus simple de nous fournir directement votre version ?

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Points : 0
    Points
    0
    Par défaut Version Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Mi
    Bonjour merci, voici le résultat de la requête


    Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)


    Merci

    Teddy

  7. #7
    Invité
    Invité(e)
    Par défaut
    Est-ce que vous envisagez d'appliquer la SP4 ?

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Points : 0
    Points
    0
    Par défaut Bonsoir
    Bonsoir merci mais le problème ce que je n'a pas le choix et je dois travailler sur la version existante.

    Cordialement,

    Ted

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Il est possible de remplacer les fonctions de fenêtrage par des sous requêtes équivalentes.
    Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/article...clause-window/

    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/ * * * * *

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Bonjour merci, j'ai complètement modifié le script en l'adaptant mais déjà la démarche est parfaite.

    Merci encore et bonnes fêtes

    Teddy

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

Discussions similaires

  1. [MySQL] calendrier et calcul auto de montants sur bulletin reservation
    Par dalmas dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/11/2007, 22h49
  2. Calcul de % sur une requête UNION ALL
    Par lodan dans le forum Langage SQL
    Réponses: 4
    Dernier message: 08/03/2007, 14h20
  3. [VBA-E] calculs automatique sur une seule feuille
    Par repié dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/03/2006, 11h53
  4. calcul durée sur access
    Par juliette2 dans le forum Access
    Réponses: 2
    Dernier message: 23/11/2005, 13h56
  5. [C#] écriture fichier .txt + calcul écart-type
    Par titaB dans le forum Windows Forms
    Réponses: 6
    Dernier message: 26/05/2005, 13h09

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