在sql Server中从单列转换为多列

在sql Server中从单列转换为多列,sql,sql-server,multiple-columns,Sql,Sql Server,Multiple Columns,我试过下面的代码。但我并没有按照多列的方式输出 select Name=stuff((select ','+ name from Input t1 WHERE t1.Name=t2.name for xml path('')),1,9,''),NAME =stuff((select ','+ name from Input t1 WHERE t1.Name=t2.name for xml path('')),1,1,'')FROM Input T2 GROUP BY NAME

我试过下面的代码。但我并没有按照多列的方式输出

select Name=stuff((select ','+ 
 name from Input t1 WHERE t1.Name=t2.name for xml path('')),1,9,''),NAME 
 =stuff((select ','+ 
 name from Input t1 WHERE t1.Name=t2.name for xml path('')),1,1,'')FROM 
 Input T2
 GROUP BY NAME

如果
names
始终使用此指定格式,则可以将
PATINDEX()
SUBSTRING()
函数一起使用

select A.CHAR [Strings], SUM(CAST(A.VALUE AS INT)) [Sum] from 
(
    SELECT SUBSTRING(Name, 1, PATINDEX('%[^A-Z]%', Name)-1) [CHAR], SUBSTRING(Name, PATINDEX('%[0-9]%', Name), len(Name)) [VALUE] FROM <table>
) a GROUP BY A.CHAR
从中选择A.CHAR[Strings],SUM(强制转换(A.VALUE为INT))[SUM]
(
从中选择子字符串(名称,1,PATINDEX(“%[^A-Z]]”,名称)-1)[CHAR],子字符串(名称,PATINDEX(“%[0-9]]”,名称),len(名称))[VALUE]
)由a.CHAR组成的组

如果
名称
列始终采用指定格式,然后使用
函数提取字符部分,使用
函数提取数字部分,并在子查询中使用这两个部分,使用
分组依据
子句和
求和
函数

查询

select t.col_a as [string character], 
sum(cast(t.col_b as int)) as [sum of digits] from(
    select left(names, 1) as col_a,
    right(names, len(names) - 1) as col_b
    from [your_table_name]
) t
group by t.col_a;

假设列中只有一个字符,下面的代码可以工作

CREATE TABLE #TEMP_SPLIT
(VALUE VARCHAR(25))


INSERT INTO #TEMP_SPLIT
SELECT 'A10'
UNION
SELECT 'B20'
UNION
SELECT 'A30'
UNION
SELECT 'B40'
UNION
SELECT 'A10'
UNION
SELECT 'C1'


SELECT c, sum(tot) 
FROM
     (
        SELECT SUBSTRING(VALUE,1,1) c ,CONVERT(FLOAT,SUBSTRING(VALUE,2,LEN  (VALUE)-1)) Tot
         FROM #TEMP_SPLIT

      )T     
 GROUP BY C

 DROP TABLE #TEMP_SPLIT

我在CTE中分离了给定字符串的字符和数字部分,并使用了一个简单的GROUPBY和sum子句

;With CTE
As
(
    Select 
        Left(Names, 1) As String,
        SUBSTRING(Names, 2, Len(Names) - 1) As Number
    From SeparateColumns
)
Select 
    String,
    Sum(Cast(Number As Int)) As SumOfDigits
From CTE
Group By String
Order By String;

下面是使用子查询和
groupby
子句的简单解决方案:

select [StringChar], SUM([Number]) from (
    select SUBSTRING(Names, 1, 1) as [StringChar],
           convert(int, SUBSTRING(Names, 2, LEN(Names))) as [Number]
    from [Input]
) as a group by [StringChar]

是的,我知道,真是巧合。厄运:)