2015-05-14 32 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