根据现有结果选择另一个值 - Oracle

时间:2018-06-12 07:29:44

标签: sql oracle

我有以下要求生成特定输出。

表e_t_d,

b_c e_no    r_no    o_b
A   XL25631 BC25896 
B   BC25896 XL25631 X0001
A   RT85962 EW89656 L0002
B   EW89656 RT85962 
A   BF12345         X0001
A   BD456321        X0001
A   DF85962         X0001
A   WS25641         X0001

SELECT t1.a_d,
       (CASE
            WHEN t1.o_b IS NULL AND t1.b_c = 'B'
            THEN
                (SELECT t1.o_b
                   FROM e_t_d t1
                  WHERE t1.e_no = t1.r_no AND t1.b_c = 'A')
            WHEN t1.o_b IS NULL AND t1.b_c = 'A'
            THEN
                (SELECT t1.o_b
                   FROM e_t_d t1
                  WHERE t1.e_no = t1.r_no AND t1.b_c = 'B')
            ELSE
                t1.o_b
        END)
           AS reference_no
  FROM e_t_d t1
 WHERE t1.b_c IN ('A', 'B') AND t1.d_id IN ('20', '35')
       AND ( (t1.a_d >= '1-Apr-2018' AND t1.a_d <= '15-Apr-2018')
            OR (t1.a_r >= '1-Apr-2018' AND t1.a_r <= '15-Apr-2018'))

使用上面的查询,我想要实现的目标如下。

以下是我想要满足的条件。

  1. 如果o_b列包含值
  2. 如果o_b列为空并且r_no包含值,则取o_b值,其中o_b = b_c和b_c!= A或反之亦然。
  3. 上面的查询我没有给出第二个条件的值。

    r_no列包含许多类型的数字,我只包含少数,同样适用于o_b列。

    我想要的结果如下。

    b_c e_no    r_no    o_b
    B   BC25896 XL25631 X0001
    A   RT85962 EW89656 L0002
    A   BF12345         X0001
    A   BD456321        X0001
    A   DF85962         X0001
    A   WS25641         X0001
    

0 个答案:

没有答案