2015-05-14 58 views
0

我在sql server中有一個表,其中有一些值。例如,如下如何按不同條款排序

Transaction ProductNo 
------------- ------------- 
2001-01-01   1 
2001-01-01   3 
2001-01-01   4 
2001-01-02   2 
2001-01-02   3 
2001-01-02   5 

我寫了一個查詢,如下

SELECT DISTINCT trans.[Transaction], 
STUFF((SELECT ',' + trans1.ProductNo AS [text()] FROM Transactions trans1 
WHERE trans.[Transaction]=trans1.[Transaction] ORDER BY trans1.[Transaction] FOR XML PATH('')), 1,1,'')[ProductNo] 
FROM Transactions trans 

輸出如下:

Transaction ProductNo 
------------- ------------- 
2001-01-01  1,3,4 
2001-01-02  2,3,5 

,但我得到異常

Conversion failed when converting the varchar value ',' to data type int. 
+0

我假設'ProductNo'是'INT'?那麼,你怎麼想把它連接到一個'',''而不必先轉換它?使用'SELECT','+ CAST(trans1.ProductNo AS VARCHAR(5))'或類似的 – Lamak

+0

謝謝@Lamak我完成了 –

回答

2

',' + trans1.ProductNo下方- 這裏是問題。 SQL服務器認爲你正試圖給一個數字添加一個逗號。嘗試更改trans1.ProductNoCAST(trans1.ProductNo AS VARCHAR)

+0

謝謝@Jonny我完成了它 –

1

您需要將int列轉換爲字符串才能連接。否則,它試圖把你的逗號變成它不能的int。

STR()文檔的數字轉換爲字符串:link

見新的查詢:

SELECT DISTINCT trans.[Transaction], 
STUFF((SELECT ',' + str(trans1.ProductNo) AS [text()] FROM Transactions trans1 
WHERE trans.[Transaction]=trans1.[Transaction] ORDER BY trans1.[Transaction] FOR  XML PATH('')), 1,1,'')[ProductNo] 
FROM Transactions trans