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?
4 Réponses :
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'
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'
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.
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'
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.