2009-09-02 7 views
0

Je demande ci-dessous, je suis en train de montrer un message « Pas Subsource pour cette RAO » quand il n'y a pas « tblOrganisation.Name », s'il vous plaît avoir regarder en dessous de requête, il fonctionne bien mais ne pas montrer mon message quand il n'y a pas d'organisation.name retournécas Sql ELSE ne fonctionne pas

DECLARE @RAOID INT, @ORGID INT 

SET @ORGID = 28 
SET @RAOID = (SELECT RAOID FROM tblOrganisation WHERE ORGID = @ORGID) 

PRINT @RAOID 

IF @RAOID IS NOT NULL 
BEGIN 
    SELECT 
    CASE 
     WHEN tblOrganisation.ORGID IS NOT NULL THEN tblOrganisation.ORGID 
     ELSE 'No ORGID' 
    END AS ORGID, 
    CASE 
     WHEN tblOrganisation.Name IS NOT NULL THEN tblOrganisation.Name 
     ELSE 'No SubSource for this RAO' 
    END as SUBSOURCENAME 
    FROM tblOrganisation 
    LEFT OUTER JOIN tblSubGroup ON tblOrganisation.SubGroupID = tblSubGroup.SubGroupID 
    WHERE 
    tblSubGroup.RAOID = @RAOID 
END 

Merci.

Cordialement, MS

+0

quel système de base de données? quelle version? –

+0

Si votre else ne fonctionne pas alors le champ n'est pas nul. Qu'est-ce que ça rend? – Donnie

Répondre

0
DECLARE @RAOID INT, @ORGID INT 

SET @ORGID = 28 
SET @RAOID = (SELECT RAOID FROM tblOrganisation WHERE ORGID = @ORGID) 

PRINT @RAOID 

IF @RAOID IS NOT NULL 
BEGIN 
    SELECT 
    CASE 
     WHEN tblOrganisation.ORGID IS NOT NULL THEN tblOrganisation.ORGID 
     ELSE 'No ORGID' 
    END AS ORGID, 
    **CASE isnull(tblOrganisation.Name,'') 
     WHEN '' THEN 'No SubSource for this RAO' 
     ELSE tblOrganisation.Name** 
    END as SUBSOURCENAME 
    FROM tblOrganisation 
    LEFT OUTER JOIN tblSubGroup ON tblOrganisation.SubGroupID = tblSubGroup.SubGroupID 
    WHERE 
    tblSubGroup.RAOID = @RAOID 
END 

faire comme cela, il est peut-être le travail pour vous.

+1

Vous devez apprendre à surligner votre code (SQL ou autre) puis cliquer sur le bouton "code" (010 1010) sur la barre d'outils pour le formater correctement! –

+0

merci pour les conseils – KuldipMCA

0
... 
FROM tblOrganisation 
LEFT OUTER JOIN 
tblSubGroup ON tblOrganisation.SubGroupID = tblSubGroup.SubGroupID 
--Need to change WHERE clause 
    AND 
    tblSubGroup.RAOID = @RAOID 
... 

L'original clause WHERE est en train de changer l'OUTER JOIN dans une INNER JOIN, vous avez donc besoin de filtrer là.

En outre, certains autres points:

  • Pourquoi rejoindre sur tblSubGroup? Il n'est pas utilisé pour ouput. Sauf si vous vérifiez cela avec CASE

  • Est-ce que tblOrganisation.Name est vide ou vide?

    ISNULL (NULLIF (tblOrganisation.Name, ''), 'Non Subsource pour cette RAO) AS OrgID

Essayez ceci, cela peut être plus ce que vous voulez ...

DECLARE @RAOID INT, @ORGID INT 

SET @ORGID = 28 
SET @RAOID = (SELECT RAOID FROM tblOrganisation WHERE ORGID = @ORGID) 
PRINT @RAOID 

IF @RAOID IS NOT NULL 
BEGIN 
    SELECT 
     ISNULL(tblSubGroup.ORGID), 'No ORGID') AS ORGID, 
     ISNULL(NULLIF(tblSubGroup.Name, ''), 'No SubSource for this RAO') AS SUBSOURCENAME 
    FROM 
     tblOrganisation 
     LEFT OUTER JOIN 
     tblSubGroup ON tblOrganisation.SubGroupID = tblSubGroup.SubGroupID 
       AND 
       tblSubGroup.RAOID = @RAOID 
END 
Cependant

, je ne suis toujours pas sûr de ce que vous voulez ...

+0

merci! De quoi devrais-je avoir besoin pour modifier la clause where? pouvez-vous s'il vous plaît me donner le bon code pour le même –

+0

son ne fonctionne pas pour moi comme sans condition où il montre toutes les oraganisations, ainsi que je reçois "Impossible de convertir en char" erreur sur la ligne ISNULL (NULLIF (tblSubGroup.ORGID , ''), 'No ORGID') COMME ORGIDE. pourrait-il être possible dans ma requête –

+0

oups. mon erreur ... – gbn