如何解决在 QLIK 中,如何根据表 A 中的条件将表 B 中的数据添加到表 A
仍然没有完全理解如何在 qlik 中做某些事情。
- 我有一个表payments,其中包括付款状态和reference_key
- 我有一个表支付 references,它有一个 reference_key 和一个 参考编号。
payments 中有大约 100 个字段。
我只想在付款中得到一个字段,如果状态已付款,则该字段具有参考编号,如果不是,则为空白 - 我发现这很难做到。
在 sql 中就是
select
payments.*,case when status='paid' then reference_number else '' end as reference_number
from
payments
inner join references on payments.reference_key = references.reference_key
但是我在 qlik 中遇到了真正的麻烦 - 我试图做的是
left join (payments)
load reference_key,reference_number from [references.qvd](qvd)
where status = 'paid';
但这只是给了我找不到“状态”字段 - 因为当然状态不在引用中。
我能想到的唯一可行的方法是创建重命名付款到 Payments_temp,加入引用 - 创建另一个带有 if() 计算字段的 Payments_temp_2 表 - 然后从 Payments_temp_2 创建一个新的 Payments 表,该表会下降reference_number 列并将calculated_reference_number 重命名为reference_number - 最终大约有 350 行代码。
显然我做错了什么 - 但我该怎么做 - 这看起来很简单 - 而且是一个常见的问题?
注意 - 任意数量的付款行,具有所有不同的状态 - 都可以加入相同的参考编号
解决方法
代码长度可能不如sql代码有效,但原理是一样的。您可以提前做的是在单独的表中准备新的 reference_number
字段(基于 status
)(无需加载完整表)。然后加入主表,删除原来的 reference_number
并将新字段重命名为 reference_number
// Join both references and payments tables but load only the required fields
// reference_key,reference_number and status
TempTable:
Load
Distinct
reference_key,reference_number
from
references.qvd (qvd);
inner join (TempTable)
Load
Distinct
status,reference_key
from
payments.qvd (qvd)
;
// perform the "if" statement calculation
ReferenceNumberStatus:
Load
reference_number,reference_key,if(status = 'paid',reference_number,'') as reference_number_status
Resident
TempTable
;
// we dont need this table anymore
Drop Table TempTable;
// load full payments table
// and join the table with the status calculation
Payments:
Load
*
from
payments.qvd (qvd)
;
join (Payments)
Load
reference_number,reference_number_status
Resident
ReferenceNumberStatus
;
// we dont need this table anymore
Drop Table ReferenceNumberStatus;
// drop the original reference_number
Drop Field reference_number from Payments;
// rename the new reference_number_status field to reference_number
Rename Field reference_number_status to reference_number;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。