我有一张订单备注表,如下所示:
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解决方案。
答案 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
显然可以根据需要替换表和列定义,但这可以帮助您到达所需的位置。
我通常尝试为这种事情创建函数,这样我就不必写出相同的代码/可以在多个地方使用它。因此,如果我的要求发生变化,那么我可以在这里进行更改,而不必在半打地方进行更改。