我有一张这样的桌子:
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
我该如何建立一个“存储过程”来实现这一目标
答案 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;
不需要存储过程。