在 OTBI 中使用什么公式来比较两列,然后从第三列导出连接值?

问题描述 投票:0回答:1

我正在尝试编写一份报告,其中连接替换的资产。

这是当前报告的简化表格:

A 栏 B 栏 C 栏 D 栏
321 123 124
323 124
324 125

我正在尝试使用公式来填充 D 列。 这个想法是,当 C 列中的任何值与 B 列中的任何值匹配时,检索 A 列的值以查找 B 列中的匹配值。

在我的示例中,因为 124 位于 C 列和 B 列中,所以我想用 323 填充第 1 行、D 列。

对于上下文,所有列都来自同一个表,并且自动选择列,列结果全部格式化为纯文本,并且列 A 值将全部不同,列 B 值也将始终不同,列 C 可以B 列中有一个或多个相同的值,但为此目的,我们可以假设它们也是不同的值。

谢谢!

我尝试使用以下内容(省略 select 和 from 子句,因为它们是自动输入的):

CASE WHEN "Column C"="Column B" 
THEN "Column A" 
ELSE null END

这只会在 D 列中产生 ELSE 条件。我希望获得 A 列第 2 行的值,因为 B 列第 2 行中的值匹配。

然后我可以用以下内容填充 D 列:

CASE WHEN "Column C" 
IN( SELECT "Column B" FROM  "TABLE") 
THEN "COLUMN A" 
ELSE null END

这正确计算了表达式并填充了 D 列,但现在使用了 A 列的行值。请参阅下面的结果:

A 栏 B 栏 C 栏 D 栏
321 123 124 321
323 124
324 125

我希望用 323 填充 D 列。如何将 A 列第 2 行的值获取到 D 列第 1 行的值?

谢谢!

sql oracle oracle-sqldeveloper
1个回答
0
投票

如果我做对了,您应该将数据集连接到自身,如下所示。添加了一些行到示例数据以进行测试...

WITH     --  S a m p l e    D a t a :
    tbl ( COL_A,    COL_B,  COL_C ) AS
        ( Select  '321', '123', '124' From Dual Union All
          Select  '323', '124', null  From Dual Union All
          Select  '324', '125', null  From Dual Union All
          Select  '327', '126', '125' From Dual Union All
          Select  '328', '127', '124' From Dual
        )
--    S Q L :
Select     t1.COL_A, t1.COL_B, t1.COL_C,
           t2.COL_A "COL_D"
From       tbl t1
Left Join  tbl t2 ON (t2.COL_B = t1.COL_C)
Order By   t1.COL_A
/*      R e s u l t :
COL_A COL_B COL_C COL_D
----- ----- ----- -----
321   123   124   323
323   124        
324   125        
327   126   125   324   
328   127   124   323   */
© www.soinside.com 2019 - 2024. All rights reserved.