Это очень старый вопрос, но я добавляю ответ, который применяет уже принятый ответ, используя COALESCE
Джастина Нисснера. Это приложение - то, как я обычно хотел бы применить эту технику, когда я запрашиваю родителя, и я также хочу иметь один столбец, который содержит разделенный запятыми список дочерних идентификаторов.
Эти примеры относятся к базе данных AdventureWorksLT
, созданной в базе данных SQL Azure, если вы используете раскрывающийся список, чтобы выбрать ее при подготовке базы данных. Здесь нет ничего нового, просто удобное приложение, которое может кому-то помочь.
Первый запрос - как я обычно его использую:
SELECT
SalesLT.ProductCategory.*,
STUFF((SELECT ','+ cast(ProductID as nvarchar(10)) FROM SalesLT.Product WHERE ProductCategoryID=SalesLT.ProductCategory.ProductCategoryID ORDER BY ProductID FOR XML PATH('')), 1, 1, '') AS ProductIDs
FROM SalesLT.ProductCategory
Второй запрос показывает использование его по собственной ссылке:
SELECT
ParentCategory.*,
STUFF((SELECT ','+ cast(child.ProductCategoryID as nvarchar(10)) FROM SalesLT.ProductCategory child WHERE child.ParentProductCategoryID=ParentCategory.ProductCategoryID ORDER BY child.ProductCategoryID FOR XML PATH('')), 1, 1, '') AS ChildCategoryIDs
FROM SalesLT.ProductCategory ParentCategory
WHERE
EXISTS (SELECT ParentProductCategoryID FROM SalesLT.ProductCategory children WHERE children.ParentProductCategoryID=ParentCategory.ProductCategoryID)