我有一个问题,我需要将子表的值连接到一个字段,同时还要遵守where子句中的OR条件。 让我们说我在Northwind数据库工作,我有一个查询,如:
SELECT c.CategoryName, p.ProductName FROM Products p join Categories c on p.CategoryID = c.CategoryID
where c.CategoryName like '%on%' or p.ProductName = 'Vegie-spread'
order by c.CategoryName, p.ProductName
我希望将所有产品名称连接到每个类别名称的一个字段中,以便Products字段看起来像这样:
Aniseed Syrup-Chef Anton's Cajun Seasoning-Chef Anton's Gumbo Mix-etc.
我的第一次尝试看起来像这样:
select c.CategoryName, ISNULL(products.line, '') AS ProductNames
from Categories c
cross apply (
select CAST((select p.ProductName + '-'
from products p
where c.CategoryID = p.CategoryID
and (c.CategoryName like '%on%' or p.ProductName = 'Vegie-spread')
order by p.ProductName
for xml path('')) as nvarchar(max)) line
) products
order by c.CategoryName
但是这会返回一些与where条件不匹配的类别。 我希望结果就像输入这个查询一样:
SELECT c.CategoryName, p.ProductName FROM Products p join Categories c on p.CategoryID = c.CategoryID
where c.CategoryName like '%on%' or p.ProductName = 'Vegie-spread'
order by c.CategoryName, p.ProductName
除了我想要每个类别一行,并且所有产品都与查询匹配。
有人可以告诉我该怎么做吗?