根据sql中的输入生成逗号分隔值

时间:2013-01-30 06:08:28

标签: sql sql-server sql-server-2008

我在以下结构中有一个名为Rule_X_ListType的表

Rue_ID  ListType_ID  Value
---------------------------
1       2            319
1       2            400
1       5            8150
1       5            1000
1       3            10211
2       2            400
2       6            10211
3       7            10211
3       3            8051
2       2            319

如果我将输入作为Rule_ID = 1 and ListType_ID = 2,那么我需要输出为带有值的字符串:

319,400

任何人都请帮忙......提前致谢...

3 个答案:

答案 0 :(得分:2)

我觉得不需要CTE或FOR XML PATH。 这可以使用更简单的COALESCE方法来实现

DECLARE @List varchar(100)

SELECT 
   @List = COALESCE(@List + ', ', '') + CAST(Value AS varchar(10))
FROM 
   Rule_X_ListType
WHERE 
   Rule_ID = 1 and ListType_ID = 2

SELECT @List

答案 1 :(得分:0)

试试这个

;WITH CTE AS
(
  SELECT * FROM Rule_X_ListType WHERE Rue_ID = 1 AND ListType_ID = 2
)
SELECT STUFF
(
   (SELECT ',' + A.Value FROM CTE A ORDER BY A.VALUE FOR XML PATH('')),1,1,''
) AS CSVValues

答案 2 :(得分:0)

SELECT DISTINCT T1.Rule_ID,T1.ListType_ID,STUFF(VAL,1,1,'') AS VALUE
FROM Rule_X_ListType T1
CROSS APPLY (SELECT  ',' + CONVERT(VARCHAR,Value)
             FROM Rule_X_ListType T2
         WHERE T1.Rule_ID =T2.Rule_ID and T1.ListType_ID =T2.ListType_ID
         FOR XML PATH(''))A(VAL)
WHERE T1.Rule_ID = 1 and T1.ListType_ID = 2

http://sqlbay.blogspot.in/

中的SQL提示和技巧