我有一个如下所示的源表,
身份证 | 专栏 | 价值 |
---|---|---|
1 | 苹果 | 10 |
1 | 苹果 | 8 |
1 | 香蕉 | 9 |
1 | 香蕉 | 12 |
我有一个如下所示的目标表,
身份证 | 苹果 | 香蕉 |
---|---|---|
1 | 10 | 9 |
1 | 8 | 12 |
如何使用雪花测试/验证这一点
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 连接数据:
所以现在我们只需将它们更改为 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 |