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
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
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 :
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 CREATE TABLE T (ID INT IDENTITY PRIMARY KEY, VALEUR DECIMAL(16,2) NOT NULL); GO INSERT INTO T VALUES (9750), (5475), (2425); GO
Elle règle le cas ou il y a deux valeurs ex æquo candidates à la rectification....
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
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/ * * * * *
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
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
Ça serait pas plus simple de nous fournir directement votre version ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part select @@version
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
Est-ce que vous envisagez d'appliquer la SP4 ?
Bonsoir merci mais le problème ce que je n'a pas le choix et je dois travailler sur la version existante.
Cordialement,
Ted
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/ * * * * *
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager