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

时间:2011-06-24 21:35:31

标签: 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 = Trivial

有没有办法创建一个我可以选择columnName的函数。并使输出与此结果匹配。

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

1 个答案:

答案 0 :(得分:2)

这适用于数据

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