2010-10-13 8 views
0

Actuellement, la procédure stockée renvoie un enregistrement basé sur un numéro d'employé transmis en tant que paramètre. Si le surpervisor_id est NULL, aucun enregistrement n'est renvoyé. Si je veux retourner un enregistrement avec tous les autres champs, et que j'ai une valeur NULL dans le champ supervor_id, comment le configurer?Procédure stockée SQL Rejoindre la question

SELECT DISTINCT 
    tblPeople.PERSON_ID, tblPeople.FIRST_NAME, tblPeople.LAST_NAME, 
    tblPeople.EMPLOYEE_NUMBER, tblPeople.EMAIL_ADDRESS, 
    tblAddress.ADDRESS_LINE1, tblAddress.ADDRESS_LINE2, tblAddress.ADDRESS_LINE3, 
    tblAddress.TOWN_OR_CITY, tblAddress.STATE, tblAddress.COUNTRY, 
    tblAddress.POSTAL_CODE, tblPeople.PHONE_NUMBER, 
    tblPeople.EFFECTIVE_START_DATE, tblPeople.EFFECTIVE_END_DATE, 
    tblLocation.LOC_CODE, 
    pp2.FIRST_NAME AS Expr1, pp2.LAST_NAME AS Expr2, 
    pp2.EMPLOYEE_NUMBER AS Expr3, tblAssignment.SUPERVISOR_ID, 
    tblAssignment.ATTRIBUTE2, tblAssignment.ATTRIBUTE3, 
    tblPeople.INSTANCE_ID, tblAssignment.LOC_ID 
FROM 
    tblPeople AS tblPeople 
RIGHT OUTER JOIN 
    tblAddress AS tblAddress ON tblPeople.PERSON_ID = tblAddress.PERSON_ID 
          AND tblPeople.INSTANCE_ID = tblAddress.INSTANCE_ID 
INNER JOIN 
    tblAssignments AS tblAssignment ON tblPeople.PERSON_ID = tblAssignment.PERSON_ID 
            AND tblPeople.INSTANCE_ID = tblAssignment.INSTANCE_ID 
INNER JOIN 
    Locations AS Location ON Location.LOC_ID = tblAssignment.LOC_ID 
          AND Location.INSTANCE_ID = tblAssignment.INSTANCE_ID 
INNER JOIN 
    tblPeople AS pp2 ON pp2.PERSON_ID = tblAssignment.SUPERVISOR_ID 
        AND pp2.INSTANCE_ID = tblAssignment.INSTANCE_ID 
WHERE  
    tblPeople.EMPLOYEE_NUMBER = '3298' 
    AND tblPeople.INSTANCE_ID = 1 
    AND tblAssignment.Assignment_Status = 'Current' 

Répondre

2

Très probablement, il vous suffit de changer cette REJOIGNEZ

INNER JOIN 
    tblPeople AS pp2 ON pp2.PERSON_ID = tblAssignment.SUPERVISOR_ID 
        AND pp2.INSTANCE_ID = tblAssignment.INSTANCE_ID 

à un LEFT OUTER JOIN

LEFT OUTER JOIN 
    tblPeople AS pp2 ON pp2.PERSON_ID = tblAssignment.SUPERVISOR_ID 
        AND pp2.INSTANCE_ID = tblAssignment.INSTANCE_ID 

Si ce SUPERVISOR_ID IS NULL, les colonnes de la table pp2 sera être NULL, mais vous devriez toujours récupérer les données pour toutes les autres colonnes.

+0

C'est ce que je pensais, mais je voulais vérifier. Merci Marc. – user279521