将多个数据记录转换为单个记录

时间:2013-11-23 09:55:39

标签: sql

我有一个包含项目数据的表格,它最简单的形式包括项目编号和类别。商品编号可以分为多个类别,但不是所有商品都属于每个类别:

Item                   category

1111                   A
1111                   B
1111                   C
2222                   A
3333                   B
3333                   C

我必须以单个商品编号及其相关类别的形式将此数据放入第三方的Feed中。 Feed布局无法更改。

因此,对于上述内容,Feed必须包含以下内容

1111,A,B,C
2222,A
3333,B,C

有谁知道如何做到这一点。我已经融入了一个小组,卷起来,转动一团糟,可以使用一些帮助。

感谢

3 个答案:

答案 0 :(得分:0)

您必须使用GROUP_CONCAT功能。它允许从多个(分组)连接值 使用GROUP BY语句时的行。 阅读更多here

好的,当您使用MS服务器时,我认为您将采用以下方法Simulating group_concat MySQL function in Microsoft SQL Server 2005?

答案 1 :(得分:0)

这是你如何获取该列表。

SELECT item,category FROM item_category WHERE item="1111"

但我怀疑你的数据库设计和你的要求。

像[1111,A,B,C],[2222,B]这样的列表...你必须在你的业务逻辑中操纵

答案 2 :(得分:0)

我做了功能,并且我实现了你想要的结果。希望以下解决方案适合您。

CREATE FUNCTION GetCategory
(@Item As integer) Returns nvarchar(max) As BEGIN
Declare @RetVal as nvarchar(max) = ''
Declare @Category as nvarchar(40)  

DECLARE db_GetString CURSOR FOR
SELECT MyTable.Category
FROM MyTable
WHERE MyTable.Item = @Item

OPEN db_GetString      
FETCH NEXT FROM db_GetString INTO @Category
WHILE @@FETCH_STATUS = 0      
BEGIN      
    SET @RetVal = @RetVal + ',' + @Category
    FETCH NEXT FROM db_GetString INTO @Category
END       

CLOSE db_GetString      
DEALLOCATE db_GetString     

Return Substring(@RetVal,2, Len(@RetVal)) END
 GO 

选择项目,dbo.GetCategory(Item)作为MyTable.Item的类别FROm MyTable GROUP