2015-04-02 298 views
0

當我使用STUFF語句合併行時,它按字母順序和數字順序對它們進行排序,導致值以不希望的順序重新排列。 如何防止發生這種情況。SQL 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

手機號碼: - 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這是我不想要的。

+0

'STUFF'語句不做任何重新排序。如果你想要一個訂單,可以在你的'xml path'查詢中添加'order by'。 – 2015-04-02 11:48:05

+0

我不知道你是否知道我想要什麼,但基本上在寫完腳本後我想回到一行:手機號碼,電影名稱和客戶號碼。電影名稱和客戶名稱的值分別爲:2f2f = 2,f&f = 1,f&fTD = 3 ...而我得到2f2f = 1,f&f = 2,f&fTD = 3 – 2015-04-02 13:40:48

回答

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], 

我無法從問題中判斷您實際需要的排序。

+0

我想表明2快2激烈= 2,fast&furious = 1,fast and furious tokyo drift = 3 – 2015-04-02 13:08:15

+0

,但是腳本放置2f2f,f&f,f&fTD的順序爲1; 2; 3時,它應該是2f2f,f&f,f&fTD 2; 1; 3 – 2015-04-02 13:50:42