sql - 如果一列不为空,则转换为多列的行
问题描述
我有一个像下面这样的表,我希望将 col4 col5 和 col6 转换为行,但是以我在下面列出的特定模式
col1 | col2 | col3 | col4 | col5 | col6 |
---|---|---|---|---|---|
一种 | b | C | 500 | 200 | |
w | X | 是的 | 1000 | 300 | |
z | G | H | 200 | 600 |
我想将其转换为以下
col1 | col2 | col3 | col4 | col5 | col6 |
---|---|---|---|---|---|
一种 | b | C | 500 | ||
一种 | b | C | 200 | ||
w | X | 是的 | 1000 | ||
w | X | 是的 | 300 | ||
z | G | H | 200 | ||
z | G | H | 600 |
我正在尝试使用 unpivot 但无法获得所需的结果
基本上,如果在其中一个列中找到空值,例如 col4 中的第一条记录,则 SQL 查询应忽略具有空值的 col4,但将 abc col5 (500) 转换为一行加上 abc col6 (200) 到另一行
解决方案
您可以使用apply
然后过滤掉所有NULL
值:
select t.col1, t.col2, t.col3, v.*
from t cross apply
(values (col4, null, null), (null, col5, null), (null, null, col6)
) v(col4, col5, col6)
where v.col4 is not null or v.col5 is not null or v.col6 is not null;
推荐阅读
- python - 如何通过 Python 运行一系列 bash 命令?
- r - 如何在ggplot中应用legend.key背景透明?
- c++ - 如何在 C++ 中从用户那里获取整数?
- ios - 图像?不能转换为 UIImage:Xcode 在尝试使用原始图像时抛出错误
- python - 在另一个函数中使用的返回值 - Python
- java - 未找到辅助技术:org.GNOME.Accessibility.AtkWrapper
- javascript - 如何在 Selenium webdriver 的帮助下调用由一些 JavaScript 事件触发的 C# 代码?
- node.js - 在获取给定用户 uid 数组的所有文档时获取空数组
- r - renderLeaflet:图例不呈现闪亮
- r - 缺少值时将 XML 转换为数据框