SQL Server根据列扩展表

时间:2018-09-11 17:55:37

标签: sql sql-server database

我有一张这样的桌子:

Name      Sex    A      B      C

Alice     F      1      2      -
Bob       M      -      3      4
David     M      -      -      5

我需要根据列键将表从'A'扩展到'C'(忽略空值),如下所示:

Name      Sex   Type   Value

Alice     F      A      1
Alice     F      B      2
Bob       M      B      3
Bob       M      C      4
David     M      C      5

我该如何建立一个“存储过程”来实现这一目标

1 个答案:

答案 0 :(得分:2)

您可以使用apply

select t.name, t.sex, v.type, v.value
from t cross apply
     (values ('A', t.A), ('B', t.B), ('C', t.C)) v(type, value)
where v.value is not null;

如果您需要“自动”完成此操作,请创建一个视图:

create view v_t as
    select t.name, t.sex, v.type, v.value
    from t cross apply
         (values ('A', t.A), ('B', t.B), ('C', t.C)) v(type, value)
    where v.value is not null;

不需要存储过程。