我正在使用SQL Server 2012,并且想要获取有关检查编号和项目名称的csv以便进行市场桶分析;
当前数据输出;
Check No Item Name
1010000001 3/4 Time Session Ale
1010000001 Aquilani Gls
1010000001 Australian Psycho 50L
1010000001 Bloody Mary
1010000001 Brookvale Ginger Beer
1010000001 Buffalo Trace
1010000001 Café Latte
1010000001 Cake Sparkling Gls
1010000001 Cap
1010000001 Capi Blood Orange
1010000001 Capi Dry Ginger
1010000002 Capi Pink Grapefruit
1010000002 Capi Soda
1010000002 Capi Sparkling Mineral
1010000002 Capi Yuzu
1010000002 Cappucino
1010000002 Carlton Draught
1010000002 Catalina Sounds Gls
1010000002 Chicken Taco
1010000002 Chivas Regal 12 Yr
1010000002 Coke
1010000002 Corona
预期输出;
1010000001 | 3/4 Time Session Ale | Aquilani Gls | Australian Psycho 50L etc
我使用了以下代码;
SELECT [CheckNo],
Items = STUFF((SELECT ', ' + [itemModName1]
FROM tbl_item AS T1
WHERE T1.[CheckNo] = T2.[CheckNo]
FOR XML PATH(''), TYPE).value('.[1]', 'varchar(max)'), 1, 1, '')
FROM tbl_item AS T2
GROUP BY [CheckNo];
结果;
它在同一列中为我提供了所有项目,这无济于事。
答案 0 :(得分:0)
首先,您不清楚“它在同一列中为我提供了所有项目,对我没有帮助。”
通过快速检查您的代码,我发现了两个问题。
GROUP BY
不应该在那里。文本的汇总由XML PATH
执行。通过使用其他GROUP BY
,我希望您的查询不起作用,因为第二列不是聚合函数。STUFF
删除1个字符,这将在开头引起一个空格。不是一件可怕的事,但仍然如此。所以我建议尝试:
SELECT [CheckNo],
Items = STUFF((SELECT ', ' + [itemModName1]
FROM tbl_item AS T1
WHERE T1.[CheckNo] = T2.[CheckNo]
FOR XML PATH(''), TYPE).value('.[1]', 'varchar(max)'), 1, 2, '')
FROM tbl_item AS T2;