在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]
是的,我知道,真是巧合。厄运:)