SQL语句用于汇总,聚合和连接

时间:2014-07-04 00:13:53

标签: sql db2 concatenation aggregate-functions

我有一张订单备注表,如下所示:

ORDER  NOTE
10000  some notes
10000  another note
20000  a new note
30000  note 1
30000  note 2

我想聚合每个订单一行,然后是所有相关的注释,如下所示:

ORDER  NOTES
10000  some notes, another note
20000  a new note
30000  note 1, note 2

是否有可以帮助我的SQL语句?

修订---

数据库是IBM db / 2,但如果存在则更喜欢SQL ANSI解决方案。

1 个答案:

答案 0 :(得分:0)

如果您使用的是MS Sql2005 +,那么这应该适合您:

CREATE FUNCTION GetOrderNotes(@OrderNumber INT) 
RETURNS NVARCHAR(MAX) 
AS
BEGIN 

    DECLARE @ReturnText NVARCHAR(MAX)

    SET @ReturnText = ''


    IF EXISTS(SELECT * FROM Orders WHERE OrderNumber = @OrderNumber) 
    BEGIN 
        SELECT 
            @ReturnText = COALESCE(@ReturnText,'') + ISNULL(Note,'') + ', '
        FROM 
            Orders
        WHERE 
            OrderNumber = @OrderNumber

    END 


    RETURN @ReturnText

END


GO 


/*THEN JUST CALL THIS FUNCTION FROM WITHIN YOUR QUERY*/

SELECT 
    OrderNumber 
    , dbo.GetOrderNotes(OrderNumber) AS [Notes Combined] 
FROM 
    Orders
GROUP BY 
    OrderNumber 
ORDER BY 
    OrderNumber 

显然可以根据需要替换表和列定义,但这可以帮助您到达所需的位置。

我通常尝试为这种事情创建函数,这样我就不必写出相同的代码/可以在多个地方使用它。因此,如果我的要求发生变化,那么我可以在这里进行更改,而不必在半打地方进行更改。