索引-PL-SQL中的类似匹配函数

时间:2019-02-28 18:54:03

标签: sql oracle

最近,我对从数据仓库获得的数据有非常具体的问题。问题已经解决,但是我必须编辑控制环境一段时间。

我们有关于收到的发票的数据,但是由于某些原因,每张发票的信息都分为两行:第一行包含重要的列 unique_code_A vendor_number 和第二行包含重要列 unique_code_B 金额。因此,每张发票都有非常特定的唯一代码,并且必须使用此代码以某种方式将两行中的信息结合起来,如您在图片中所见。

how my table looks vs. how i would like to see row

2 个答案:

答案 0 :(得分:1)

好吧,您可以使用聚合:

select date_key, invoice_type,
       max(case when unique_code_b is null then unique_code_a end) as unique_code_a,
       max(unique_code_b) as unique_code_b,
       max(case when unique_code_b is null then vendor_number end) as vendor_number,
       max(case when unique_code_b is not null then amount end) as amount
from t
group by date_key, invoice_type;

编辑:

如果可以使用唯一代码进行匹配,那么我建议:

select date_key, invoice_type,
       coalesce(unique_code_a, unique_code_b) as unique_code,
       max(case when unique_code_b is null then vendor_number end) as vendor_number,
       max(case when unique_code_b is not null then amount end) as amount
from t
group by date_key, invoice_type, coalesce(unique_code_a, unique_code_b);

答案 1 :(得分:1)

根据您所说的,自我加入可能应该起作用:

SELECT 
    A.DATE_KEY,
    A.INVOICE_TYPE,
    A.UNIQUE_CODE_A,
    B.UNIQUE_CODE_B,
    A.VENDOR_NUMBER,
    B.AMOUNT
FROM MyTable A 
INNER JOIN MyTable B ON A.UNIQUE_CODE_A=B.UNIQUE_CODE_B