我有一张大桌子可以容纳我们所有的顾客。 每条记录都包含购买的商品,购买日期以及每次购买时无用复制的许多其他字段。
我希望创建一个存储过程来定期导出一个新表,每个客户端只有一条记录,所有日期和购买的项目连接成一个由常规字符或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|.......
你有什么建议吗?
答案 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