Je dois créer une vue à partir de plusieurs tables. Une des colonnes de la vue devra être composée d'un nombre de lignes de l'une des tables sous la forme d'une chaîne avec des valeurs séparées par des virgules.Utilisation de COALESCE dans la vue SQL
Voici un exemple simplifié de ce que je veux faire.
Customers:
CustomerId int
CustomerName VARCHAR(100)
Orders:
CustomerId int
OrderName VARCHAR(100)
Il existe une relation un-à-plusieurs entre Client et Commandes. Donc, étant donné ces données
Customers
1 'John'
2 'Marry'
Orders
1 'New Hat'
1 'New Book'
1 'New Phone'
Je veux une vue d'être comme ceci:
Name Orders
'John' New Hat, New Book, New Phone
'Marry' NULL
Alors que tout le monde apparaît dans la table, indépendamment du fait qu'ils ont des ordres ou non.
J'ai une procédure stockée que j'ai besoin de traduire à cette vue, mais il semble que vous ne pouvez pas déclarer les paramètres et appeler les process stockés dans une vue. Des suggestions sur la façon d'obtenir cette requête dans une vue?
CREATE PROCEDURE getCustomerOrders(@customerId int)
AS
DECLARE @CustomerName varchar(100)
DECLARE @Orders varchar (5000)
SELECT @Orders=COALESCE(@Orders,'') + COALESCE(OrderName,'') + ','
FROM Orders WHERE [email protected]
-- this has to be done separately in case orders returns NULL, so no customers are excluded
SELECT @CustomerName=CustomerName FROM Customers WHERE [email protected]
SELECT @CustomerName as CustomerName, @Orders as Orders
Quelle version de SQL Server vous avoir? – David
SQL Server 2008 – kateroh