2009-09-24 8 views
1

avec SQL Server Reporting Services Je voudrais générer un rapport avec des détails en ligne pour certaines commandes comme celle-ci:Sql lignes de sortie de wrap Server Reporting

 
Order Details 
2315 1x5432 Apple Tree, 9x912 Roses, 1x13 Spade 
2316 3x12 Lawn grass 

Comment pourrais-je faire le plus efficacement possible, que ce soit avec Transact-SQL ou en utilisant quelque chose intégré à Reporting Services? (Je pourrais finir par beaucoup de commandes donc un appel pour chaque ligne de commande pourrait être cher ...)

+0

Je viens de trouver une belle réponse par Jim Doherty sur ce fil: http://bytes.com/topic/sql-server/answers/712734-how-merge -multi-rows-single-row. –

Répondre

1

Je fais la même chose en utilisant XML et STUFF

SELECT DISTINCT 
    Col1.Table_Name TableName, 
    STUFF 
    (
      (
      SELECT 
      ', ' + CONVERT (VARCHAR, Col2.Column_name) 
      FROM Information_Schema.Columns Col2 
      WHERE Col1.Table_Name = Col2.Table_Name 
      ORDER BY Col2.Table_Name 
      FOR XML PATH('') 
      ), 1, 2, '' 
    ) AS ColumnNames 
FROM Information_Schema.Columns Col1 
+0

Nice et élégant ... –

1

J'ai généralement résolu ce genre de problème avec une fonction définie par l'utilisateur.

CREATE FUNCTION GetDetails (@order_id INT) RETURNS NVARCHAR(1000) AS 
BEGIN 
    DECLARE mycursor 
    CURSOR READ_ONLY 
    FOR SELECT description 
    FROM OrderDetails 
    WHERE order_id = @order_id 

    DECLARE @description NVARCHAR(100) 
    DECLARE @return_value NVARCHAR(1000) 

    SET @return_value = '' 
    OPEN mycursor 
    FETCH NEXT FROM mycursor INTO @description 
    WHILE @@fetch_status = 0 
    BEGIN 
    SET @return_value = @return_value + @description 
    FETCH NEXT FROM mycursor INTO @description 
    IF (@@fetch_status = 0) SET @return_value = @return_value + ', ' 
    END 
    CLOSE mycursor 
    DEALLOCATE mycursor 
    RETURN @return_value 
END; 

Votre requête serait alors:

SELECT order_id, GetDetails(order_id) as details 
FROM Order 
0

Je l'ai résolu en utilisant COALESCE, inspiré par this thread:


CREATE FUNCTION GetDetails(@OrderID varchar(10)) 
RETURNS varchar(1000) AS 
BEGIN 
    DECLARE @result varchar(1000), @delimiter char 

    SET @delimiter = ',' 

    SELECT @result = COALESCE(@result + @delimiter, '') + Details 
    FROM 
    (
     SELECT ProductNumber 
     , Quantity + 'x' + ProductNumber + ' ' + ProductName AS Details 
     FROM OrderDetail where OrderID = @OrderID 
    ) OrderDetail 
    ORDER BY ProductNumber 

    RETURN @result 
END 

puis, comme dans the answer by Jeremy Stein:

SELECT OrderId, GetDetails(OrderId) AS Details 
FROM Order 
Questions connexes