从许多记录创建新表连接字段

时间:2016-03-17 11:58:45

标签: sql-server

我有一张大桌子可以容纳我们所有的顾客。 每条记录都包含购买的商品,购买日期以及每次购买时无用复制的许多其他字段。

我希望创建一个存储过程来定期导出一个新表,每个客户端只有一条记录,所有日期和购买的项目连接成一个由常规字符或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|.......

你有什么建议吗?

1 个答案:

答案 0 :(得分:0)

尝试此代码并根据您的要求进行自定义

    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