将SQL Server表展平为字符串

时间:2011-02-09 12:13:30

标签: sql sql-server

我有一张表:

ID  | Value
----------------
 1  | One
 2  | Two
 3  | Three

我需要做的是从这些值创建一个字符串,格式为:

'1: One, 2: Two, 3: Three'

我知道如何使用游标执行此操作,但它将在视图中用作列,因此它不是真正的高性能选项。 有什么指针吗?

5 个答案:

答案 0 :(得分:5)

WITH T(ID,Value) AS
(
SELECT 1, 'One' UNION ALL
SELECT 2, 'Two' UNION ALL
SELECT 3, 'Three' 
)

SELECT  STUFF(
        (SELECT ', ' + CAST(ID as varchar(11)) + ': ' + Value
         FROM T
         FOR XML PATH (''))
     , 1, 2, '')

答案 1 :(得分:4)

看看像

这样的东西
DECLARE @Table TABLE(
        ID INT,
        Value VARCHAR(20)
)
INSERT INTO @Table SELECT 1,'One'
INSERT INTO @Table SELECT 2,'Two'
INSERT INTO @Table SELECT 3,'Three'

SELECT  STUFF(
                (
                    SELECT  ', ' + CAST(ID AS VARCHAR(MAX)) + ': ' + Value
                    FROM    @Table
                    FOR XML PATH(''), TYPE 
               ).value('.','varchar(max)') 
               ,1,2, '' 
          )

答案 2 :(得分:3)

SELECT STUFF((
    SELECT ' ' + CAST(ID AS VARCHAR(2)) + ': '+ Value
    FROM   dbo.Table
    FOR    XML PATH('')
    ), 1, 1, ''
  ) As concatenated_string

答案 3 :(得分:1)

DECLARE @ans VARCHAR(max)

SET @ans =''

SELECT @ans = @ans + str(id)+':'+ value FROM table

SELECT @ans

如果您的SQL版本不支持,请将max更改为8000

答案 4 :(得分:0)

如果可能的话,我根本不会在数据库中这样做。它不是以某种方式格式化数据而设计的;让调用应用程序处理。

在C#中(假设data是SqlDataReader的一个实例):

var l = new List<string>();
while (reader.Read())
    l.Add(string.Format("{0}: {1}", reader[0], reader[1]));
var s = string.Join(", ", l.ToArray());