Sql server 创建新表,将多个记录中的字段连接起来

Sql server 创建新表,将多个记录中的字段连接起来,sql-server,Sql Server,我有一张大桌子,可以放所有顾客购买的东西。 每个记录都包含购买的物品、购买日期和许多其他字段,这些字段对于每次购买都是无用的复制 我希望创建一个存储过程,定期导出一个新表,每个客户机只有一条记录,所有日期和购买的项目都连接到一个文本字段中,用常规字符或crlf分隔 现在我的“购买”表是这样的: ID |Name|PurDate |PurItem |etc 0001|Jack|20100101|Art. 115|....... 0002|Jack|20100105|Art. 230|......

我有一张大桌子,可以放所有顾客购买的东西。 每个记录都包含购买的物品、购买日期和许多其他字段,这些字段对于每次购买都是无用的复制

我希望创建一个存储过程,定期导出一个新表,每个客户机只有一条记录,所有日期和购买的项目都连接到一个文本字段中,用常规字符或crlf分隔

现在我的“购买”表是这样的:

ID  |Name|PurDate |PurItem |etc
0001|Jack|20100101|Art. 115|.......
0002|Jack|20100105|Art. 230|.......
0003|Jack|20120408|Art. 098|.......
0004|John|20150808|Art. 021|.......
0005|John|20160203|Art. 432|.......
新表应该如下所示:

ID  |Name|Purchase|etc
0001|Jack|20100101 Art. 115;20100105 Art. 230;20120408 Art. 098|.......
0002|John|20150808 Art. 021;20160203 Art. 432|.......

您有什么建议吗?

试试这段代码,并根据您的要求进行定制

    CREATE PROCEDURE UPDATERECORDS
BEGIN

-- Create temp table to get distinct names
CREATE TABLE #TEMP (NAME NVARCHAR(100))
-- insert names
INSERT INTO #TEMP
SELECT DISTINCT NAME FROM PURCHASES
-- insert to your table
INSERT INTO [YOUR NEW TABLE]
SELECT 
ROW_NUMBER()OVER (ORDER BY NAME) ID, 
NAME = 
STUFF((SELECT ', ' + NAME
FROM PURCHASE A
WHERE A.NAME = B.NAME
FOR XML PATH('')), 1, 2, ''),
PURCHASE = 
STUFF((SELECT ', ' + PURCHASE
FROM PURCHASE A
WHERE A.NAME = B.NAME
FOR XML PATH('')), 1, 2, ''), ETC.....
FROM #TEMP B

END

看看这个问题:我的建议:不要这样做。在一列中保留多个值是一种糟糕的设计。