在Oracle中将一列的数据显示为一行
Display data of a column as a row in Oracle
首先,非常感谢您提前抽出时间。
我有一个table如下图:
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的数据,如下所示:
------------------------------------------------------------------------------------------------
| TABLE 1 COLUMN 2 | TABLE 1 COLUMN 1 | TAB1_COL_5 | TABLE 1 COLUMN 2 | TABLE 1 COLUMN 4 |
------------------------------------------------------------------------------------------------
如果行的 COL_DESC 中没有数据,则需要显示 COL_NAME 列中的数据。
我确实问过一个类似的问题 ,但是这个问题的标准相当复杂。我想知道如何以最简单的方式将单列数据转换为一行。
下面是我试过的代码。
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'
)
如果有人能帮我解决这个问题,我将不胜感激。再次感谢您的宝贵时间和帮助。
据我所知,我们不能在 pivot 子句中使用查询(当我们需要 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)
)
这是您要找的吗?
首先,非常感谢您提前抽出时间。
我有一个table如下图:
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的数据,如下所示:
------------------------------------------------------------------------------------------------
| TABLE 1 COLUMN 2 | TABLE 1 COLUMN 1 | TAB1_COL_5 | TABLE 1 COLUMN 2 | TABLE 1 COLUMN 4 |
------------------------------------------------------------------------------------------------
如果行的 COL_DESC 中没有数据,则需要显示 COL_NAME 列中的数据。
我确实问过一个类似的问题
下面是我试过的代码。
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'
)
如果有人能帮我解决这个问题,我将不胜感激。再次感谢您的宝贵时间和帮助。
据我所知,我们不能在 pivot 子句中使用查询(当我们需要 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)
)
这是您要找的吗?