【发布时间】:2015-06-07 08:38:57
【问题描述】:
当我使用 STUFF 语句合并行时,它会按字母和数字对它们进行排序,这会导致值以不希望的顺序重新排列。 如何防止这种情况发生。
STUFF ((SELECT '; ' + t2.[film name]
FROM [filmbase].[dbo].[filmstowatch] t2
WHERE t1.[Mobile Number] = t2.[Mobile Number]
FOR XML PATH('')), 1,2,'') [film name],
STUFF ((SELECT '; ' + t2.[customer No]
FROM [filmbase].[dbo].[filmstowatch] t2
WHERE t1.[Mobile Number] = t2.[Mobile Number]
FOR XML PATH('')), 1,2,'') [customer no]
FROM temp.dbo.Temptable t1
例如,
原始数据:
客户编号:-1
电影名称:- 速度与激情
手机号码:- 123456789
客户编号:-2
电影名称:- 2 Fast 2 Furious
手机号码:- 123456789
客户编号:-3
电影名称:- 速度与激情东京漂移
手机号码:- 123456789
实际输出:
Mobile Number:- 123456789,
Film Name:- 2 Fast 2 Furious; Fast & Furious; Fast & Furious Tokyo Drift
Customer No:- 1;2;3
期望的输出:
Mobile Number:- 123456789,
Film Name:- 2 Fast 2 Furious; Fast & Furious; Fast & Furious Tokyo Drift
Customer No:- 2;1;3
我希望电影名称按照电影名称在所需输出示例中出现的顺序与客户编号匹配。
我认为代码应该是这样的
STUFF ((SELECT '; ' + t2.[film name]
FROM [filmbase].[dbo].[filmstowatch] t2
WHERE t1.[Mobile Number] = t2.[Mobile Number]
order by film_name /* and then here should be something that matches film name to customer no??*/
FOR XML PATH('')), 1,2,'') [film name],
要得到 2F2F,f&f,f&fTD, 2,1,3 相反,我得到 2F2F,f&f,f&fTD, 1,2,3 这是我不想要的。
【问题讨论】:
-
STUFF语句不进行任何重新排序。如果您想要订单,请将order by添加到您的xml path查询中。 -
我不确定你是否知道我想要什么,但基本上在写完剧本后我想回到一行:手机号码、电影名称和客户号码。其中电影名称和客户名称具有各自的值:2f2f = 2, f&f=1, f&fTD = 3 ...而不是我得到 2f2f=1, f&f=2, f&fTD=3
标签: sql merge sql-server-2012 duplicate-data