【发布时间】:2019-04-16 14:14:55
【问题描述】:
假设我有这种类型的数据集:
row Num_A Num_B Num_C Reg_1 Reg_2
------ ----- ----- ----- ----- -----
1 9400 9500 9700 AAA CCC
2 9700 9400 9500 BBB DDD
3 9500 9400 9200 EEE AAA
4 9100 9300 9900 AAA DDD
考虑以下条件:
在第 1 行中,Num_B"95000" 出现在 Num_A(第 3 行)中,对应的 Num_A(第 1 行)"94000" 等于它的Num_B(第 3 行)(即案例`“94000”)
因此,新列 Comm_1 将具有 Num_A 和 Num_B 的组合作为其值。 Comm_2 也是如此
对于Comm_3,条件与Comm_1或Comm_2相同,还有一个附加条件是第1行的Reg_1(或Reg_2)'AAA'(或'CCC')相等到第 3 行的 Reg_1 或 Reg_2(就是这种情况)。
我想构造一个查询,结果如下所示:
row Num_A Num_B Num_C Reg_1 Reg_2 Comm_1 Comm_2 Comm_3
------ ----- ----- ----- ----- ----- ----- ----- -----
1 9400 9500 9700 AAA CCC 94009500 94009700 94009500
2 9700 9400 9500 BBB DDD 97009400 97009500 NULL
3 9500 9400 9200 EEE AAA 95009400 NULL 95009400
4 9100 9300 9900 AAA DDD NULL NULL NULL
我尝试了以下基本语法,但它不起作用:
SELECT
IF(Num_B in (select distinct Num_A from mydata) , concat(Num_A,Num_B), Null) as Comm_1,
IF(Num_C in (select distinct Num_A from mydata) , concat(Num_A,Num_C), Null) as Comm_2
FROM mydata
所以请提供任何提示,并让我阅读pl/sql 中的正确观点或我需要学习的任何程序。
【问题讨论】:
-
您输入和输出中的数字不同,我不明白您要应用的逻辑。 (我真的不确定“通讯员 Num_A “94000”是否等同于他的 Num_A” - 那应该是“......他的 Num_B”吗?)你能编辑你的问题澄清一下吗?
-
现有查询的输出是什么?
-
@SamChats,第 4 行正在获取
NULLforComm_3,因为9300或9900(Num_B和Num_C)不在Num_A列表中跨度> -
@SamChats,这是第 1 行的示例,其余行相同
-
我不确定这是否有帮助,抱歉;最好在问题中充分解释。不过,我看不到任何与答案相矛盾的东西;如果这些是错误的,那么你需要解释原因。