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 :

Maximum d'une valeur et d'une constante


Sujet :

MS SQL Server

  1. #1
    ced
    ced est actuellement connecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    avril 2002
    Messages
    5 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : avril 2002
    Messages : 5 930
    Points : 23 458
    Points
    23 458
    Par défaut Maximum d'une valeur et d'une constante
    Bonjour,

    Je sèche sur un problème qui me semble pourtant tout bête :
    Dans une requête, j'ai une colonne avec des nombres qui peuvent être inférieurs, supérieurs ou égaux à 1. Je souhaite que, pour chaque ligne, la requête me renvoie la plus grande valeur entre la donnée en base et 1.
    Le problème, c'est que si j'utilise MAX(ma_donnee, 1), je prends une erreur de synthaxe.
    Une idée sur comment utiliser MAX (ou autre chose) dans ce cas précis ?

    Merci d'avance,

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  2. #2
    ced
    ced est actuellement connecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    avril 2002
    Messages
    5 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : avril 2002
    Messages : 5 930
    Points : 23 458
    Points
    23 458
    Par défaut
    Au passage, on s'en sort de toute façon avec un CASE, mais est-ce qu'il n'existe pas une fonction plus pratique ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    ced
    ced est actuellement connecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    avril 2002
    Messages
    5 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : avril 2002
    Messages : 5 930
    Points : 23 458
    Points
    23 458
    Par défaut
    Autre précision qui peut avoir son importance, je suis en SQL Server 2000.
    J'aurais pu le préciser + tôt...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : juillet 2007
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Eh bah non, pas possible !!

    Tu es obligé de le faire avec un case when, la fonction MAX étant réservé aux requêtes... Par exemple, si tu veux connaître la valeur maximum que prend un de tes champs dans ta table, tu vas faire la requête suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(tonChamps) FROM taTable

  5. #5
    ced
    ced est actuellement connecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    avril 2002
    Messages
    5 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : avril 2002
    Messages : 5 930
    Points : 23 458
    Points
    23 458
    Par défaut
    Et oui, c'est bien ce que je craignais...
    Avec le case, ça marche mais ça rallonge considérablement la synthaxe pour une opération somme toute basique...

    Tant pis

    Merci de ton aide,

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  6. #6
    Futur Membre du Club
    Inscrit en
    juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : juillet 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut fonction utilisateur
    Bonjour,
    Tu peux utiliser une fonction utilisateur. En Transact-SQL, ça donne :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE FUNCTION maxi(@nb1 float, @nb2 float) RETURNS float
    begin
    	if (@nb1 > @nb2) 
    		begin 
    			return @nb1; 
    		end
    	return @nb2; 
    end;
     
    go

    Et après tu l'utilises dans tes requêtes :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *, dbo.maxi(1.,monchamp) FROM matable;

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 20 902
    Points : 49 641
    Points
    49 641
    Billets dans le blog
    1
    Par défaut
    le case est optimisé, la fonction utilsateur UDF ne l'est pas.
    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/ * * * * *

  8. #8
    Futur Membre du Club
    Inscrit en
    juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : juillet 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Parfois, on s'en fiche de l'optimisation

    Personnellement, je ne vois pas de moyen plus simple, plus efficace ou plus élégant de remplacer les petites valeurs par 1. lors de l'insertion de données dans une table.
    Mais je veux bien apprendre !

Discussions similaires

  1. Réponses: 10
    Dernier message: 05/02/2015, 14h47
  2. Réponses: 8
    Dernier message: 05/04/2011, 08h06
  3. Réponses: 82
    Dernier message: 05/02/2011, 14h34
  4. tester une valeur et affecter une valeur
    Par Elise0251 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 29/07/2009, 16h31
  5. Réponses: 10
    Dernier message: 30/11/2006, 23h06

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