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

Langage SQL Discussion :

Si une table vide, choisir une autre table ?


Sujet :

Langage SQL

  1. #1
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut Si une table vide, choisir une autre table ?
    Bonjour,

    je vous expose mon problème qui à mon avis n'a pas de solution, mais on ne sait jamais avec les cerveaux brillants de DVP.

    Je travaille sous SQL Serveur et mon chef me demande de réaliser ceci :

    Sélectionner les données de ma table scm_entities_selections. Mais si je n'ai pas de données alors afficher les données de BASE_ENTITY

    J'ai réussi à le faire avec un bout de code:
    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
    declare @test				int
     
    SELECT @test=count(*)
    		FROM SCM_ENTITIES_SELECTIONS SO 
    		WHERE SO.SELECTION_TYPE='1DIM'
    		AND SO.CONNECTION_CODE=DBO.SCMGETSESSIONID()
     
    IF @test>0
    BEGIN
    	SELECT 
    		P.B_ENTITY_CODE AS TXT_BE_CODE,
    		P.CAT_CODE AS CAT_CODE,
    		C.CAT_IDEN AS CATEGORY,
    		P.B_ENTITY_IDEN AS IDENTIFIER, 
    		P.B_ENTITY_DESC AS DESCRIPTION, 
    		P.B_ENTITY_CLASS AS CLASS 
    	FROM BASE_ENTITIES P INNER JOIN CATEGORIES C ON P.CAT_CODE = C.CAT_CODE
    	WHERE C.CAT_IDEN='REFERENCE-COLORIS'
    END
    ELSE
    BEGIN
    	SELECT 
    		P.B_ENTITY_CODE AS TXT_BE_CODE, 
    		P.CAT_CODE AS CAT_CODE, 
    		C.CAT_IDEN AS CATEGORY, 
    		P.B_ENTITY_IDEN AS IDENTIFIER, 
    		P.B_ENTITY_DESC AS DESCRIPTION, 
    		P.B_ENTITY_CLASS AS CLASS 
    	FROM BASE_ENTITIES P INNER JOIN CATEGORIES C ON P.CAT_CODE = C.CAT_CODE
    	WHERE 
    		C.CAT_IDEN='REFERENCE-COLORIS'
    		AND EXISTS
    			(
    			SELECT *
    			FROM SCM_ENTITIES_SELECTIONS SO 
    			WHERE SO.SELECTION_TYPE='1DIM'
    			AND SO.ENTITY_CODE=P.B_ENTITY_CODE
    			AND SO.CONNECTION_CODE=DBO.SCMGETSESSIONID()
    			)
    END
    Seulement, le progiciel n'accepte pas de traitement comme celui-là. Mon chef aimerait que je trouve le même résultat en une seule requête.

    Mais que ce soit avec Union, Intersect, MINUS et consors, je ne vois pas de solution...

    Allez-vous me sortir une solution de derrière les fagots?

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Une idée à adapter à ton cas. Je ne sais pas si ça peut marcher mais ça vaut le coup d'essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT CASE 
        WHEN (SELECT COUNT(*)
            FROM SCM_ENTITIES_SELECTION) > 0 THEN SCM_ENTITIES_SELECTIONS.*
        ELSE BASE_ENTITY.*
    END
    FROM SCM_ENTITIES_SELECTIONS, BASE_ENTITY
    Un FROM table1, table2 ! Beurk ! Ca ne me ressemble pas mais je ne vois pas comment faire autrement !

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Ca ne marchera pas Cinéphil, s'il y a des données dans les deux tables vous aurez droit à un magnifique produit cartésien, et si une des tables est vide la requête ne retournera rien

  4. #4
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Bon ben finalement j'ai eu mon éclair de génie

    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
    SELECT 
    		P.B_ENTITY_CODE AS TXT_BE_CODE, 
    		P.CAT_CODE AS CAT_CODE, 
    		C.CAT_IDEN AS CATEGORY, 
    		P.B_ENTITY_IDEN AS IDENTIFIER, 
    		P.B_ENTITY_DESC AS DESCRIPTION, 
    		P.B_ENTITY_CLASS AS CLASS 
    	FROM BASE_ENTITIES P INNER JOIN CATEGORIES C ON P.CAT_CODE = C.CAT_CODE
    	WHERE 
    		C.CAT_IDEN='LIGNE-COLORIS'
    		AND (EXISTS
    				(SELECT *
    				FROM SCM_ENTITIES_SELECTIONS SO 
    				WHERE SO.SELECTION_TYPE='1DIM'
    				AND P.B_ENTITY_CODE = SO.ENTITY_CODE
    				AND SO.CONNECTION_CODE=51
    				)
    			OR
    			(select count(*) from SCM_ENTITIES_SELECTIONS SO WHERE SO.SELECTION_TYPE='1DIM'
    				AND SO.CONNECTION_CODE=51)=0
    			)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/04/2013, 12h45
  2. Réponses: 4
    Dernier message: 20/03/2007, 09h54
  3. creer une autre table à partir d'une requete
    Par papou34 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2007, 22h42
  4. Données d'une table deviennent colonne dans autre table?
    Par christophe1245 dans le forum Access
    Réponses: 8
    Dernier message: 19/12/2005, 22h01
  5. Table vide dans une BD
    Par Riouxe21 dans le forum ASP
    Réponses: 2
    Dernier message: 06/07/2004, 19h48

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