Sql 将表值拆分为多个列,并创建一个列名

Sql 将表值拆分为多个列,并创建一个列名,sql,sql-server,tsql,sql-server-2008,pivot,Sql,Sql Server,Tsql,Sql Server 2008,Pivot,对于SQL server中的数据库,我有一列的数据,如下所示 Severity 10006=0;10007=2;10008=5;10009=1; 10006=0;10007=1;10008=6;10009=0; 10006=0;10007=3;10008=5;10009=1; 10006=临界值 10007=专业 10008=未成年人 10009=微不足道 有没有办法创建一个可以选择columnName的函数。并使输出与此结果匹配 critical Major Minor Trivia

对于SQL server中的数据库,我有一列的数据,如下所示

Severity
10006=0;10007=2;10008=5;10009=1;
10006=0;10007=1;10008=6;10009=0;
10006=0;10007=3;10008=5;10009=1;
10006=临界值 10007=专业 10008=未成年人 10009=微不足道 有没有办法创建一个可以选择columnName的函数。并使输出与此结果匹配

critical  Major  Minor   Trivial
--------------------------------
0          2      5        1
0          1      6        0
0          3      5        1

这对数据有效

with t as (
select '10006=0;10007=2;10008=5;10009=1;' as col union
select '10006=0;10007=1;10008=6;10009=0;' union
select '10006=0;10007=3;10008=5;10009=1;')

select substring(col,patindex('%10006=[0-9];%',col)+6,1) as critical,
       substring(col,patindex('%10007=[0-9];%',col)+6,1) as major,
       substring(col,patindex('%10008=[0-9];%',col)+6,1) as minor,
       substring(col,patindex('%10009=[0-9];%',col)+6,1) as trivial
from t

你在找分割函数吗?如果范围大于0-9,我将如何更改代码?例如,如果10007=23;使用t作为选择SeverityColumn作为TableName中的列选择substringcol,patindex“%10006=[0-9];%”,列+6,1为关键列,子字符串列,patindex“%10007=[0-9];%,列+6,1作为主调,子字符串列,patindex“%10008=[0-9];%”,列+6,1作为次列,子字符串列,patindex“%10009=[0-9];%”,col+6,1是来自t的微不足道的感谢您的帮助