如何测试源中的行值是否作为目标中的列

问题描述 投票:0回答:1

我有一个如下所示的源表,

身份证 专栏 价值
1 苹果 10
1 苹果 8
1 香蕉 9
1 香蕉 12

我有一个如下所示的目标表,

身份证 苹果 香蕉
1 10 9
1 8 12

如何使用雪花测试/验证这一点

sql database snowflake-cloud-data-platform snowflake-schema
1个回答
0
投票
with src_data(id, col, val) as (
    select * from values
        (1  ,'apple',   10),
        (1  ,'apple',   8),
        (1  ,'banana',  9),
        (1  ,'banana',  12)
), target_data(id, apple, banana) as (
    select * from values
        (1, 10, 9),
        (1, 8,  12),
        (2, 10, 9),
        (1, 10, 13),
        (1, 7, 12)
)
select t.*
    ,a.val as a_val
    ,b.val as b_val
from target_data as t
left join src_data as a
    on t.id = a.id 
        and a.col = 'apple'
        and t.apple = a.val 
left join src_data as b
    on t.id = b.id 
        and b.col = 'banana'
        and t.banana = b.val                

展示了如何使用允许遗漏的 LEFT JOIN 连接数据:

enter image description here

所以现在我们只需将它们更改为 INNER JOINS,并且仅输出

t.*
值:

select t.*
from target_data as t
join src_data as a
    on t.id = a.id 
        and a.col = 'apple'
        and t.apple = a.val 
join src_data as b
    on t.id = b.id 
        and b.col = 'banana'
        and t.banana = b.val 

我们得到过滤后的结果:

身份证 苹果 香蕉
1 10 9
1 8 12
© www.soinside.com 2019 - 2024. All rights reserved.