SQL STUFF语句命令错误

时间:2015-04-02 11:44:12

标签: sql merge sql-server-2012 duplicate-data

当我使用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 INSTEAD我得到2F2F,f& f,f& fTD,1,2,3这是我不想要的。

1 个答案:

答案 0 :(得分:1)

在子查询中添加order by以获取所需的顺序。例如,对于随机排序:

STUFF((SELECT '; ' + t2.[film name]
       FROM [filmbase].[dbo].[filmstowatch] t2
       WHERE t1.[Mobile Number] = t2.[Mobile Number]
       ORDER BY NEWID()
       FOR XML PATH('')
      ), 1, 2, ''
     ) as [film name],

我无法从问题中看出你真正想要的顺序。