1
votes

Comment obtenir la dernière valeur lors de la combinaison de deux valeurs si la première valeur est nulle?

J'ai une requête SQL qui combine le prénom et le nom. Mais s'il n'y a pas de prénom et qu'il y a une valeur dans le deuxième nom, alors le résultat de la combinaison est nul

select  CompanyContact.FirstName + ' '
 + COALESCE(CompanyContact.LastName, '')  AS Name
from bsDocument 
LEFT JOIN Contact AS CompanyContact ON CompanyContact.ContactID = bsDocument.DocumentContactID

 WHERE   bsDocument.SellerID = 3632
AND bsDocument.Module = 'bsContract'

Dans la colonne suivante, la valeur de CompanyContact.FirstName est nulle et la valeur de CompanyContact.LastName est 'Dahal' mais le résultat est affiché comme nul. Comment puis-je résoudre ce problème?


2 commentaires

Voulez-vous toujours l'espace devant le nom de famille?


NULL + String = NULL en SQL. Donc, s'il y a une probabilité d'avoir NULL dans l'une ou l'autre partie, veuillez gérer ISNULL () à la fois dans la partie prénom et nom de famille. J'espère que la sortie sera comme votre attente.


4 Réponses :


1
votes

utilisez COALESCE dans FirstName comme comme nom

select COALESCE(CompanyContact.FirstName,'') + ' '
 + COALESCE(CompanyContact.LastName, '')  AS Name
from bsDocument 
LEFT JOIN Contact AS CompanyContact ON CompanyContact.ContactID = bsDocument.DocumentContactID

 WHERE   bsDocument.SellerID = 3632
AND bsDocument.Module = 'bsContract'


0 commentaires

1
votes

utilisez concat ()

select concat(CompanyContact.FirstName,' ',CompanyContact.LastName)  AS Name
from bsDocument 
LEFT JOIN Contact AS CompanyContact ON CompanyContact.ContactID = bsDocument.DocumentContactID
WHERE   bsDocument.SellerID = 3632
AND bsDocument.Module = 'bsContract'


0 commentaires

0
votes

Vous pouvez utiliser stuff () avec une concaténation de chaîne:

select stuff((coalesce(' ' + c.FirstName, '') +
              coalesce(' ' + c.LastName, ''),
             ), 1, 1, '') as Name
from bsDocument d left join
     Contact c
     on c.ContactID = d.DocumentContactID
where d.SellerID = 3632 and
      d.Module = 'bsContract';

Cela a la belle propriété de n'inclure que des espaces entre le premier et le nom de famille. Cette structure s’étend facilement à autant de chaînes nulles que vous le souhaitez.


0 commentaires

0
votes

Utilisez une expression CASE:

SELECT
CASE 
    WHEN NULLIF(CompanyContact.FirstName, '') IS NULL THEN CompanyContact.LastName
    ELSE CompanyContact.FirstName + ' ' + CompanyContact.LastName
    END AS Name
FROM bsDocument 
LEFT JOIN Contact AS CompanyContact ON CompanyContact.ContactID = bsDocument.DocumentContactID
WHERE bsDocument.SellerID = 3632
AND bsDocument.Module = 'bsContract'


0 commentaires