sql - 将对角线样式行转换为单行
问题描述
我有一些如下所示的排名表,表格元素看起来有点像对角线。
A B C
------------------------------
Icecream NULL NULL
Waffle NULL NULL
Banana NULL NULL
NULL Cherry NULL
NULL Apple NULL
NULL Coke NULL
NULL NULL Banana
NULL NULL Cake
NULL NULL Waffle
我想像下面这样转换上表
A B C
------------------------------
Icecream Cherry Banana
Waffle Apple Cake
Banana Coke Waffle
当元素为数字类型时,有一些将此样式表转换为单行样式表的示例。但是很难找到像这样的varchar风格
解决方案
按列将表格分解为单独的视图,然后按 ROWNUM 将视图重新组合在一起:
WITH cteA AS (SELECT ROWNUM AS RN, A FROM DATA_TABLE WHERE A IS NOT NULL),
cteB AS (SELECT ROWNUM AS RN, B FROM DATA_TABLE WHERE B IS NOT NULL),
cteC AS (SELECT ROWNUM AS RN, C FROM DATA_TABLE WHERE C IS NOT NULL)
SELECT A, B, C
FROM cteA
INNER JOIN cteB USING (RN)
INNER JOIN cteC USING (RN)
如果你碰巧有一个不支持的数据库,WITH
你可以对子选择做同样的事情:
SELECT A, B, C
FROM (SELECT ROWNUM AS RN, A FROM DATA_TABLE WHERE A IS NOT NULL)
INNER JOIN (SELECT ROWNUM AS RN, B FROM DATA_TABLE WHERE B IS NOT NULL)
USING (RN)
INNER JOIN (SELECT ROWNUM AS RN, C FROM DATA_TABLE WHERE C IS NOT NULL)
USING (RN)
推荐阅读
- python - 带星数的聚集数索引
- ios - 在 iOS 中 React Native 更改状态栏文本颜色
- kdb - kdb q - 有效地计算平面文件中的表
- asp.net-core - 扩展 AbpUserRoles 以添加新列 - aspnetboilerplate
- python - NLTK 如何查找全名而不是部分名称
- php - CodeIgniter 3.1.9 - 无法识别登录表单验证的问题
- react-native - React Native props.value 未定义
- android - java.lang.IllegalArgumentException:没有为片段找到 id 0x7f07007c 的视图
- c# - C# - Excel 导出列表
- css - 导航栏位置