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 :

SQL2005 : Select Case + gestion null


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Avatar de Oncle_Pete
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 246
    Points : 175
    Points
    175
    Par défaut SQL2005 : Select Case + gestion null
    Bonjour

    J'ai une table d'adresses postales (table FR) depuis contient autant d'enregistrements que de varietes d'adresses (adresse client, adresse fournisseur, adresse livraison, ...).
    Tout est fonction d'un code 1=adresse client, 2=livraison, 3=...

    Je voudrais faire un select qui comporte (entre autre)
    EntrepriseClient, AdresseClient, CPostalClient, VilleClient,
    EntrepriseLivraison, AdresseLivraison, CPostalLivraison, VilleLivraison
    sachant que si mes données de livraisons sont nulles, alors je dois recuperer celles du client (qui ne peuvent pas l'etre)

    Cette requete ne marche pas et je seche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT plusieurs_variables_de_ma_table_commande,  
    	CASE 
    	WHEN Code=1 then (select fr.Entreprise as EntrepriseClient, fr.adresse as AdresseClient, 
    			fr.CP as CPostalClient, fr.Ville as VilleClient
    			from oh, fr 
    			where oh.Code= fr.Code)
    	WHEN Code=2 then (select fr.Entreprise as EntrepriseLivraison, fr.adresse as AdresseLivraison, 
    			fr.CP as CPostalLivraison, fr.Ville as VilleLivraison
    			from oh, fr 
    			where oh.AutreCode = fr.Code)
    from oh
    where CodeSociete = 0

    Quelqu'un aurait-il une idee ?
    Merci a vous

    Oncle Pete

  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 : 43
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonsoir,

    Lorsque vous dites que votre requête ne marche pas, dites si c'est la syntaxe ou si elle ne ramène pas ce dont vous avez besoin.
    Vous avez oublié un END pour terminer votre CASE :

    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
    20
    21
    22
    SELECT  
    	CASE 
    		WHEN Code = 1 THEN (
    					SELECT fr.Entreprise EntrepriseClient,
    							fr.adresse AdresseClient,
    							fr.CP CPostalClient,
    							fr.Ville VilleClient
    					FROM oh, fr 
    					WHERE oh.Code= fr.Code
    				)
    		WHEN Code = 2 THEN (
    					SELECT fr.Entreprise EntrepriseLivraison,
    							fr.adresse AdresseLivraison, 
    							fr.CP CPostalLivraison,
    							fr.Ville VilleLivraison
    					FROM oh, fr 
    					WHERE oh.AutreCode = fr.Code
    				)
    		-- ELSE ... (non obligatoire)
    	END
    FROM oh
    WHERE CodeSociete = 0

  3. #3
    Membre habitué
    Avatar de Oncle_Pete
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 246
    Points : 175
    Points
    175
    Par défaut
    Salut elsuket,


    Ben en fait, c'est la syntaxe qui n'est pas bonne. De ce fait je n'ai pas encore vu mon jeu de donnees.

    Meme en rajoutant le END (merci) Le message retourne par SQL Svr est
    Une seule expression peut être spécifiée dans la liste de sélection quand la sous-requête n'est pas introduite par EXISTS.
    D'autre part, je ne vois pas comment instancier la gestion du code client livraison lorsque celui ci est null

    Merci

    Oncle Pete

  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 : 43
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonsoir,

    Je ne crois pas que ceci est la meilleure solution, mais c'est une piste :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    CREATE FUNCTION maFonction (@code TINYINT)
    	RETURNS @TbAdresse TABLE
    	(
    		Entreprise VARCHAR(64),
    		AdresseClient (VARCHAR(256)
    		CPostalClient CHAR(5)
    		Ville VARCHAR(64)
    	)
    AS
    BEGIN
    	-- Client
    	IF @code = 1
    	BEGIN
    		INSERT INTO @TbAdresse
    		SELECT fr.Entreprise,
    				fr.adresse,
    				fr.CP,
    				fr.Ville
    		FROM oh
    		JOIN fr ON oh.Code = fr.Code
    		WHERE oh.CodeSociete = 0
    	END
     
    	-- Livraison
    	IF @code = 2
    	BEGIN
    		INSERT INTO @TbAdresse
    		SELECT fr.Entreprise,
    				fr.adresse,
    				fr.CP,
    				fr.Ville
    		FROM oh
    		JOIN fr ON oh.AutreCode = fr.Code
    		WHERE oh.CodeSociete = 0
    	END
    	RETURN
    END
    GO
     
    -- Test
    SELECT * FROM maFonction(maColonne)

  5. #5
    Membre habitué
    Avatar de Oncle_Pete
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 246
    Points : 175
    Points
    175
    Par défaut
    En effet, elsuket vu sous cet angle, le resultat semble vouloir rire.
    Je regarderai ca demain matin.
    Je n'avais pas ravaude sur ce type de solution, mais quoi qu'il en soit bravo et merci pour votre abnegation

    Oncle Pete

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion arguments dans un select case
    Par galene86 dans le forum VBScript
    Réponses: 2
    Dernier message: 28/05/2015, 17h07
  2. Problème SELECT, CASE et Group by
    Par Royd938 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/10/2014, 07h41
  3. VBA : Select case et inputbox gestion des erreurs
    Par 1ma91nat10n dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/05/2011, 13h07
  4. erreur select case
    Par maximedrouet dans le forum ASP
    Réponses: 4
    Dernier message: 15/05/2006, 14h40
  5. vérification de passage dans un select case
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 14/06/2004, 10h05

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