sql - 如果列数据为空,则向左推送数据
问题描述
当我做:
SELECT * FROM myTable
6列表格
我得到这样的东西:
但我想得到这样的东西:
我尝试了以下方法:
SELECT COALESCE(NULLIF(col-1,''),
NULLIF(col-2,''),
NULLIF(col-3,''),
NULLIF(col-4,''),
NULLIF(col-5,''), NULLIF(col-6,''))
有了这个,我得到了第一个非空列,但是如果有的话,如何获得下一个?
还是有其他解决方案?
解决方案
您可以取消透视数据,按将空值移动到最后一个位置的列对它们进行排序,然后再次旋转到原始形式:
select *
from (
select rn, row_number() over (partition by rn order by col) rc, val
from (select rownum rn, col1, col2, col3, col4, col5, col6 from mytable)
unpivot (val for col in (col1, col2, col3, col4, col5, col6)))
pivot (max(val) for rc in (1 col1, 2 col2, 3 col3, 4 col4, 5 col5, 6 col6))
如果您id
的表中有一些独特之处,请使用它而不是rn
. 如果要根据数据而不是位置对数据进行排序,请更改order by
. row_number()
Pivot 和 unpivot 需要 Oracle 11 或更高版本。
推荐阅读
- java - Excel文件的Java Base64编码缺少最后一个字节
- reactjs - 在 Dagre D3 中添加自定义反应组件作为标签
- javascript - 为什么我的路由器不适用于 Firebase?
- python - Discord Translation Bot AttributeError:“NoneType”对象没有属性“组”
- python - Discord.py bot + Quart:尝试连接到语音通道总是会给出“任务的未来附加到不同的循环”
- c# - 如何使用 32 位 C#.NET 应用程序访问 64 位 HKLM\Software Registry
- python - 在 Windows 中创建虚拟环境
- google-bigquery - 时间分区表上的 BigQuery 原子负载?
- javascript - 带有“提交”的 addEventListener 不起作用,实际上保持刷新
- django - 使用 Django 频道定期向所有人广播消息