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

Développement SQL Server Discussion :

[2005]codage complexe dans un CASE


Sujet :

Développement SQL Server

  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut [2005]codage complexe dans un CASE
    Bonjour

    Je suis un peu embêté pour fabriquer mon code et j'aurais besoins d'une aide un peu empirique.

    J'ai mis au point un SELECT qui va devenir un peu complexe avec un CASE et je voudrais faire un truc complexe dans un des cas. Sauf que je suis un peu pommé pour la mise en place et je ne trouve pas de solution en lisant la MSDN.

    Je vais vous présenter ma requête avec des éléments abstrait. Je ferais ensuite l'explication avec les commentaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT une liste de champs dont le IFO.Type_Champ, 
    CASE IFO.Type_Champ
    	WHEN 'chk' THEN 
    là je veux faire un codage complexe qui va utiliser un CURSOR ou un test conditionnel en faisant appel à d'autre table et encore déclarer une variable que je vais remplir de différente manière, enfin faire du code. L'idée étant de rammener une valeur de type chaine construite
     
    	WHEN 'lst' THEN un champ quelconque de la table
    	ELSE ''
    END AS ValeurAffichage
     
    FROM dbo.SITE_Information_Membre IM
    là il y a d'autre jointures
    Voilà, ce qu'il me manque c'est la structure de code à mettre aprés le THEN pour qu'il comprenne qu'il va faloir travailler le code. Il ne veux pas compre le BEGIN END et je ne sais pas quoi mettre d'autre.

    Pouvez vous m'aider ?

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Le mieux est que vous passiez à du code à base de IF ... THEN

    @++

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Malheureusement une structure IF THEN n'est pas possible dans mon cas car je dois retourner une table complète et le résultat d'un champ dépend du contenu d'un autre champ de la même table résultat.

    J'ai tenté ça au début de ma réflexion, mais je n'ai abouti à rien de probant.

    Aurais tu un bout de code en exemple ?

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    là je veux faire un codage complexe qui va utiliser un CURSOR ou un test conditionnel en faisant appel à d'autre table et encore déclarer une variable que je vais remplir de différente manière, enfin faire du code. L'idée étant de rammener une valeur de type chaine construite
    Donnez-nous le pseudo-code pour voir ...

    @++

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Ok pour un exemple, mais idée au départ est bien d'avoir un conseil emprique car je vais avoir besoins de ce type de chose dans diférent contexte.

    Voici un exemple avec du vrai code que j'ai placé dans un FUNCTION, pour l'instant. En fait, je ne voudrias pas utiliser de FUNCTION car j'ai remarqué que c'était trés gourmand en ressource.

    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
    18
    19
     
    SELECT une liste de champs dont le IFO.Type_Champ, 
    CASE IFO.Type_Champ
    	WHEN 'chk' THEN 
    WHILE LEN(@ValeurChk) > 0
    BEGIN
    	SET @ListeLoisir = @ListeLoisir + (SELECT Texte FROM dbo.GLOBAL_Liste 
    		WHERE Valeur = LEFT(@ValeurChk,patindex('%,%',@ValeurChk)-1)
    		AND Nom_Liste = @NomListe) + ', '
    	SET @ValeurChk = (stuff(@ValeurChk,1,patindex('%,%',@ValeurChk),''))
    END	
     
    RETURN(LEFT(@ListeLoisir,LEN(@ListeLoisir) - 1 ))
    	WHEN 'lst' THEN un champ quelconque de la TABLE
    	ELSE ''
    END AS ValeurAffichage
     
    FROM dbo.SITE_Information_Membre IM
    là il y a d'autre jointures
    Expliquer ce bout de code pourrait ête assez long car il faudrait que je détail ma conception complète de la gestion de liste déroulante dans mes sites. Mais s'il le faut, je le ferais. L'idée de ce bout de code est de rammerne une chaine de caractère.

  6. #6
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    A la rigueur, tu ne pourrais pas passer par une fonction à qui tu envois tes paramètre et qui te ressort ta valeur. Ça serait plus simple.

    Par contre en terme de perf, ce n'est vraiment pas à conseiller.

  7. #7
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide Jinroh77. Mais c'est en gros ce que j'ai dit dans mon précédent post.

    Mais je me pose la question basique : est ce que, tout simplement, il est possible de faire un codage complexe dans un CASE ?

    Est ce que le CASE ne renvoi tout simplement pas une simple valeur ?

Discussions similaires

  1. [2005] Null dans un Case
    Par Lyche dans le forum Développement
    Réponses: 3
    Dernier message: 24/10/2009, 21h24
  2. Réponses: 5
    Dernier message: 05/03/2006, 16h35
  3. Tableaux-->faire un roll-over dans une case
    Par gwendy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 23/12/2005, 12h04
  4. Affichage différent selon texte dans une case
    Par pingoo78 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 16h32
  5. Calculs complexes dans une requête
    Par ARRG dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/06/2005, 19h11

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