【问题标题】:Oracle - Replace null values for pivot columns with join from another tableOracle - 用来自另一个表的连接替换数据透视列的空值
【发布时间】:2021-12-30 09:42:06
【问题描述】:

我有一个数据透视表输出,现在我想检查数据透视列中的值,如果另一个表的另一列中的值为 null,则替换这些值。

Invoice_No Column value
111 A One
111 B Two
111 C Three
111 E Five
(SELECT Invoice_No, new_value, Column_Name  FROM table_name)
PIVOT(max(new_value) 
FOR Column_Name IN ('A','B','C','D','E'))

这返回了下表

Invoice_No 'A' 'B' 'C' 'D' 'E'
111 One Two Three null Five

现在,我想将 D 列中的空值替换为另一个表中与 Invoice_no 匹配的值。

with temp as
(SELECT Invoice_No, new_value, Column_Name  FROM table_name)
PIVOT(max(new_value) 
FOR Column_Name IN ('A','B','C','D','E'))
select nvl(temp.D,bckup.D)
from
(select A,B,C,D,E from Backup_table) bckup
join
temp
on
temp.Invoice_No = bckup = Invoice_No

现在,我收到 D 列不存在的错误消息。

【问题讨论】:

    标签: oracle join null pivot nvl


    【解决方案1】:

    Pivot 会将您的列重命名为“D”,而不仅仅是 D。因此,您需要在查询中进行简单更新 -

    WITH temp AS(SELECT *
                   FROM(SELECT Invoice_No, new_value, Column_Name
                          FROM table_name)
                  PIVOT(max(new_value) FOR Column_Name IN ('A' AS A,'B' AS B,'C' AS C,'D' AS D,'E' AS E)
                )
    SELECT NVL(temp.D,bckup.D)
      FROM(SELECT A,B,C,D,E
             FROM Backup_table) bckup
      JOIN temp ON temp.Invoice_No = bckup.Invoice_No
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-16
      • 2021-10-13
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 2014-07-08
      相关资源
      最近更新 更多