我正在尝试编写一份报告,其中连接替换的资产。
这是当前报告的简化表格:
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 行的值?
谢谢!
如果我做对了,您应该将数据集连接到自身,如下所示。添加了一些行到示例数据以进行测试...
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 */