如何解决在Oracle中将列的数据显示为一行
首先,我非常感谢您提前抽出宝贵的时间。
我有一张桌子,如下所示:
COL_TAB
----------------------------------------------
| TABLE_NAME | COL_NAME | COL_DESC |
----------------------------------------------
| TABLE1 | TAB1_COL_2 | TABLE 1 COLUMN 2 |
| TABLE1 | TAB1_COL_4 | TABLE 1 COLUMN 4 |
| TABLE1 | TAB1_COL_3 | TABLE 1 COLUMN 3 |
| TABLE1 | TAB1_COL_5 | |
| TABLE1 | TAB1_COL_1 | TABLE 1 COLUMN 1 |
----------------------------------------------
我想显示上表中的数据,如下所示:
------------------------------------------------------------------------------------------------
| TABLE 1 COLUMN 2 | TABLE 1 COLUMN 1 | TAB1_COL_5 | TABLE 1 COLUMN 2 | TABLE 1 COLUMN 4 |
------------------------------------------------------------------------------------------------
如果连续的COL_DESC中没有数据,则需要显示COL_NAME列中的数据。
我确实问过类似的问题here,但条件很复杂。我想知道如何以最简单的方式将一列数据旋转到一行。
下面是我尝试的代码。
SELECT NVL(COL_DESC,COL_NAME)
FROM
(
SELECT NVL(COL_DESC,COL_NAME),COL_NAME
FROM COL_TAB
WHERE TABLE_NAME = 'TABLE1'
)
PIVOT
(
MIN(COL_NAME)
FOR COL_NAME IN (SELECT COL_NAME FROM COL_TAB WHERE TABLE_NAME = 'TABLE1'
)
如果有人可以帮助我解决此问题,我将非常感谢。再次非常感谢您的时间和帮助。
解决方法
据我所知,我们不能在数据透视子句中使用查询(只有当我们需要IN
作为动态对象(我不太熟悉)时,才可能使用XML),但是通过显式指定col_name可以实现它,
SELECT MAX(tab1_col_1),MAX(tab1_col_2),MAX(tab1_col_3),MAX(tab1_col_4),MAX(tab1_col_5)
FROM (SELECT coalesce(col_desc,col_name) col_desc,col_name,table_name
FROM col_tab
WHERE table_name = 'TABLE1')
PIVOT
(
MIN(col_desc)
FOR col_name IN('TAB1_COL_1' AS tab1_col_1,'TAB1_COL_2' tab1_col_2,'TAB1_COL_3' tab1_col_3,'TAB1_COL_4' tab1_col_4,'TAB1_COL_5' tab1_col_5)
)
这是您要寻找的吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。