Ma conjecture est que les NULL
problématiques sont dans SOD.SalesOrderId
.
One way to handle them is by filtering them out:
SELECT P.Name,
STUFF ((SELECT ' | ' + CONVERT(VARCHAR(22) , SOD.SalesOrderID)
FROM Sales.SalesOrderDetail SOD
WHERE
P.ProductID = SOD.ProductID and SOD.SalesOrderId is not null
FOR XML PATH ('')
), 1, 1, '')
as Orders
FROM Production.Product P
Une autre façon est de les convertir à une représentation acceptable:
SELECT P.Name,
STUFF ((SELECT ' | ' + coalesce(CONVERT(VARCHAR(22) , SOD.SalesOrderID), '<NULL>')
FROM Sales.SalesOrderDetail SOD
WHERE
P.ProductID = SOD.ProductID
FOR XML PATH ('')
), 1, 1, '')
as Orders
FROM Production.Product P
EDIT:
Les NULL
s sont retournés parce qu'il n'y a pas de correspondance dans SalesOrderDetail
pour les enregistrements. Que voudriez-vous retourné dans ce cas?
Pour trouver ces produits:
select p.*
from Production.Product p left outer join
Sales.SalesOrderDetail sod
on p.ProductID = SOD.ProductID
where sod.ProductId is null;
Si vous voulez les filtrer, puis utiliser un sous-requête:
select t.*
from (<either of the above queries>) t
where t.Orders is not NULL
EDIT II:
Si vous voulez des blancs à retourner , puis envelopper coalesce()
autour de la valeur:
SELECT P.Name,
coalesce(STUFF ((SELECT ' | ' + CONVERT(VARCHAR(22) , SOD.SalesOrderID)
FROM Sales.SalesOrderDetail SOD
WHERE
P.ProductID = SOD.ProductID
FOR XML PATH ('')
), 1, 1, ''), '')
as Orders
FROM Production.Product P
Qu'est-ce qui est annulé et qui ne devrait pas l'être? Pourriez-vous montrer quelques exemples de données et de résultats que vous recherchez? – sisdog