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 déconnecté
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    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

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

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    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

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

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    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

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

    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 déconnecté
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    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

  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
    21 850
    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 850
    Points : 52 984
    Points
    52 984
    Billets dans le blog
    6
    Par défaut
    le case est optimisé, la fonction utilsateur UDF ne l'est pas.

  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