【发布时间】:2021-09-11 01:58:27
【问题描述】:
我有一个源表(Oracle DB),其中包含以下示例数据,我想从中检查特定列(col3)的值是否与 column1 相同。如果是这样,则将新字段填充为“Y”否则为“N”。
Sample source table
SRC_TABLE
col1 col2 col3 col4 col5 ....colx
----- --------- ------ ---- ----- --------
ID001 SUPLIER_1 121.00 abc 123 ...
ID001 SUPLIER_2 100 abc 123 ...
ID001 SUPLIER_3 201.12 abc 123 ...
ID002 SUPLIER_1 150.00 abc 123 ...
ID002 SUPLIER_3 150 abc 123 ...
从上表中,我想检查给定 col1 组的 col3 是否相同,如果它们相同,则填充为“Y”,否则为“N”,如下面的 New_Field 列所示。
col1 col2 col3 col4 col5 ....colx New_Field
----- --------- ------ ---- ----- -------- ---------
ID001 SUPLIER_1 121.00 abc 123 ... N
ID001 SUPLIER_2 100 abc 123 ... N
ID001 SUPLIER_3 201.12 abc 123 ... N
ID002 SUPLIER_1 150.00 abc 123 ... Y
ID002 SUPLIER_3 150 abc 123 ... Y
我无权在源中操作更改,我想根据源数据得出计算并加载到目标中。我尝试使用 group by 同时从源中获取数据以及 select 语句,但由于不是 group by 表达式而出现错误。非常感谢任何有助于实现所需输出的帮助。谢谢!
select
col1,
col2,
col3,
col4,
.
.
.
.
colx,
case when count(distinct col3) > 1 then 'N' else 'Y' end as new_field
from src_table
group by col1,col2,col4,col5...colx
在 group by 子句中添加 new_field 会返回无效标识符错误,如果我通过得到 not a group by expression 错误将其从组中删除,如上所示。不知道如何得到想要的结果。
【问题讨论】:
-
您需要在 Group by 中添加 col3 而不是 new_field。