我需要从几个表中创建一个视图。视图中的一列必须由其中一个表中的许多行组成,作为具有逗号分隔值的字符串。
这是我想做的一个简化示例。
Customers:
CustomerId int
CustomerName VARCHAR(100)
Orders:
CustomerId int
OrderName VARCHAR(100)
客户和订单之间存在一对多的关系。所以鉴于这些数据
Customers
1 'John'
2 'Marry'
Orders
1 'New Hat'
1 'New Book'
1 'New Phone'
我想要一个像这样的视图:
Name Orders
'John' New Hat, New Book, New Phone
'Marry' NULL
这样每个人都会出现在表格中,无论他们是否有订单。
我有一个存储过程,需要将其转换为该视图,但您似乎无法在视图中声明参数并调用存储过程。有关如何将此查询纳入视图的任何建议?
CREATE PROCEDURE getCustomerOrders(@customerId int)
AS
DECLARE @CustomerName varchar(100)
DECLARE @Orders varchar (5000)
SELECT @Orders=COALESCE(@Orders,'') + COALESCE(OrderName,'') + ','
FROM Orders WHERE CustomerId=@customerId
-- this has to be done separately in case orders returns NULL, so no customers are excluded
SELECT @CustomerName=CustomerName FROM Customers WHERE CustomerId=@customerId
SELECT @CustomerName as CustomerName, @Orders as Orders