sql - SQL Server根据列展开表
问题描述
我有一张这样的桌子:
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
我怎么能建立一个“存储过程”来完成这个
解决方案
您可以使用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;
不需要存储过程。
推荐阅读
- javascript - 脚本在其他浏览器中有效,但在 Firefox 中无效
- jquery-terminal - 在Mozilla中单击左右箭头时光标不可见
- javascript - 如何将图像添加到 form.serialize()?
- java - 寻找门户解决方案,其中每个 portlet 都可以安装在单独的 JVM 上
- selenium - Chrome 74:删除 cookie 需要很长时间
- javascript - 无法读取 PDF 组件中未定义的属性“forEach”
- unity3d - Hox 使用 Azure 事件中心/物联网中心 sdk 修复 Unity 中的“无效 URI”?
- reactjs - 如果数据已经存在,则响应跳过 API 请求
- c++ - 如何修复函数的大小未知或为零并且 main 中缺少函数调用
- javascript - 在 chrome 扩展中使用时捕获的视频帧中的单个图像后,有什么方法可以停止 MediaRecorder 对象?