在SQL Server中转置字符串值

时间:2017-03-17 06:13:12

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

我有Emp_Name

Emp_Name
A
B
C
D

值。

我想在一行中打印序列号,如

1)A, 2)B, 3)C, 4)D ....

3 个答案:

答案 0 :(得分:3)

尝试以下查询,

SELECT  STUFF((
    SELECT  ', '+ CAST( ROW_NUMBER() OVER(ORDER BY Emp_Name) AS VARCHAR) +')' +Emp_Name
    FROM    @Employee_Table
    FOR XML PATH('')
    ),1,2,'')   AS Emp_Name

答案 1 :(得分:0)

使用CTE功能获得转置结果:

DECLARE @String VARCHAR(100) = 'A,B,C,D'

;WITH _CTE ( TransStr , RemainStr ) AS
(
    SELECT SUBSTRING(@String,0,CHARINDEX(',',@String))   , 
           SUBSTRING(@String,CHARINDEX(',',@String)+1,LEN(@String))
   UNION ALL
   SELECT CASE WHEN CHARINDEX(',',RemainStr) = 0 THEN RemainStr ELSE   
           SUBSTRING(RemainStr,0,CHARINDEX(',',RemainStr)) END, 
          CASE WHEN CHARINDEX(',',RemainStr) = 0 THEN '' ELSE  
        SUBSTRING(RemainStr,CHARINDEX(',',RemainStr)+1,LEN(RemainStr)) END
   FROM _CTE 
   WHERE RemainStr<> '' 
)

SELECT  STUFF((
SELECT  ', '+ CAST( ROW_NUMBER() OVER(ORDER BY TransStr) AS VARCHAR) +')' + 
TransStr FROM _CTE FOR XML PATH('')
),1,2,'')   AS String

答案 2 :(得分:0)

试试这个

declare @myTable table([Emp_Name] varchar(max))

insert @myTable values ('A'), ('B'), ('C'), ('D')


select STUFF((
        select  ', ' + CAST(ROW_NUMBER() over (order by Emp_Name) AS VARCHAR) +')' + [Emp_Name]
        from @myTable
        for xml path(''), type
    ).value('.', 'varchar(max)'), 1, 1, '') [values]

只需用我的临时表更改你的表