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 :

sql server : problème de division


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut sql server : problème de division
    bonjour,

    je travaille avec les requêtes sous python et sur une BD sql server.
    je voulais exécuter cette formule:
    "select ((p2-p1)/p1)*100 .........from........"
    mais après l'exécution me donne une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime error  Traceback (most recent call last):   File "<string>", line 12, IN <module>   File "f:\program files\arcgis\desktop10.1\arcpy\arcpy\management.py", line 3635, IN CreateDatabaseView     raise e ExecuteError: ERROR 999999: Error executing FUNCTION. [Microsoft SQL Server Native Client 10.0: Incorrect syntax near 'RendTotal1'.] DBMS TABLE NOT found Failed TO execute (CreateDatabaseView).
    RQ: RendTotal1 est remplacé par p1
    j'ai essayé d'utiliser CASE mais ça ne change rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    req="select CASE WHEN ((p2-p1)=0) OR  (p1=0) THEN NULL  ELSE ((p2-p1)/p1)*100  END as p  from table1,table2  where table1.code1=table2.code2"
    arcpy.CreateDatabaseView_management(BD,"resultat",req)
    autre remarque: le champ p1 contient des valeurs égale à 0.
    et le champ de différence peut contient des valeurs 0 et négative.


    j'espère que j'aurai une réponse,
    je vous remercie d'avance

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par noramokh Voir le message
    je travaille avec les requêtes sous python et sur une BD sql server.
    S'il s'agit de Microsoft Sql Server, des forums dédiés existent sur ce site...
    Citation Envoyé par noramokh Voir le message
    je voulais exécuter cette formule:
    "select ((p2-p1)/p1)*100 .........from........"
    mais après l'exécution me donne une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime error  Traceback (most recent call last):   File "<string>", line 12, IN <module>   File "f:\program files\arcgis\desktop10.1\arcpy\arcpy\management.py", line 3635, IN CreateDatabaseView     raise e ExecuteError: ERROR 999999: Error executing FUNCTION. [Microsoft SQL Server Native Client 10.0: Incorrect syntax near 'RendTotal1'.] DBMS TABLE NOT found Failed TO execute (CreateDatabaseView).
    Je lis dans le message d'erreur : "TABLE NOT found"

    Citation Envoyé par noramokh Voir le message
    RQ: RendTotal1 est remplacé par p1
    j'ai essayé d'utiliser CASE mais ça ne change rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    req="select CASE WHEN ((p2-p1)=0) OR  (p1=0) THEN NULL  ELSE ((p2-p1)/p1)*100  END as p  from table1,table2  where table1.code1=table2.code2"
    arcpy.CreateDatabaseView_management(BD,"resultat",req)
    autre remarque: le champ p1 contient des valeurs égale à 0.
    et le champ de différence peut contient des valeurs 0 et négative.
    p1 égal à 0 va poser un problème tel que c'est écrit (exception sur division par zéro). Il faudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CASE p1
    WHEN 0 THEN NULL
    ELSE CAST( ((p2-p1)/p1)*100.0 as DECIMAL(8.2))
    END
    Citation Envoyé par noramokh Voir le message
    j'espère que j'aurai une réponse
    Il ne faut pas être si pessimiste...
    Philippe.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Encore faudrait t-il poster dans le bon forum , ici il s'agit du SQL Firebird non SQL server ! => je me suis permis de le déplacer

    cependant j'ai l'impression qu'il manque au moins une parenthèse à la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select CASE WHEN ((p2-p1)=0) OR  (p1=0) THEN NULL  ELSE ((p2-p1)/p1)*100)  END as p
    ou qu'elles sont de trop

    [Edit] grillé par phillipe
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    merci pour votre réponse.
    j'ai contacté le forum du sql server depuis hier mais je n'avais pas de réponse.

    merci

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    1) postez la requête finale, pas un ersatz.
    2) êtes vous sur la bonne base ? SQL Server étant multibase, si vous ne précisez pas sur quelle base doit être jouée la requête il ne trouvera pas les tables.
    3) les jointures se font dans la clause FROM avec des JOIN et un prédicat ON. Pas dans le WHERE (et cela depuis 1992... soit 22 ans de retard pour votre syntaxe !)

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

  6. #6
    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
    Bonjour,
    Pour les problèmes de divisions par zero, la solution élégante est d'utiliser nullIF qui renvoie null lorsqu'une condition est remplie.
    Or on a une erreur lors d'une division par zero mais pas d'erreur lors d'une division par null, cela renvoie null
    cela donne donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ((p2-p1)/nullif(p1,0))*100
    Après cela ne fera pas trouver la table pour autant.
    Cordialement
    Soazig

Discussions similaires

  1. sql server : problème de division
    Par noramokh dans le forum SQL
    Réponses: 2
    Dernier message: 03/06/2014, 15h18
  2. ADO + SQL Server + problème de connexion
    Par bchristo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/12/2005, 17h08
  3. [SQL SERVER] : Problème de déclenchement d'un trigger
    Par sosso971 dans le forum Développement
    Réponses: 1
    Dernier message: 04/11/2005, 08h11
  4. [SQL Server] problème de caractères spéciaux
    Par mbibim63 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 02/06/2005, 18h38
  5. [SQL Server]Problème avec l'authentification SQL SERVER
    Par tidou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/04/2005, 15h40

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