在 QLIK 中,如何根据 table A 中的条件将数据从 table B 添加到 table A
in QLIK, how do I add data from table B to table A based on conditions in table A
仍然没有完全理解如何在 qlik 中做某些事情。
- 我有一个 table payments,其中包括付款状态,还有一个 reference_key
- 我有一个 table 付款 references 有一个 reference_key 和一个
reference_number.
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,加入引用 - 创建另一个 payments_temp_2 table 并使用 if( ) 在那个 - 然后从 payments_temp_2 创建一个新的 payments table 删除 reference_number 列并将 calculated_reference_number 重命名为 reference_number - 最终大约~350 行代码。
很明显我做错了什么 - 但我该怎么做 - 这看起来很简单 - 而且是一个常见的问题?
注意 - 任何数量的付款行,具有所有不同的状态 - 都可以加入同一个参考号
代码长度可能不如 sql 代码有效,但原理是相同的。您可以提前在单独的 table 中准备新的 reference_number
字段(基于 status
)(无需加载完整的 table)。然后加入主 table,删除原来的 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;
仍然没有完全理解如何在 qlik 中做某些事情。
- 我有一个 table payments,其中包括付款状态,还有一个 reference_key
- 我有一个 table 付款 references 有一个 reference_key 和一个 reference_number.
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,加入引用 - 创建另一个 payments_temp_2 table 并使用 if( ) 在那个 - 然后从 payments_temp_2 创建一个新的 payments table 删除 reference_number 列并将 calculated_reference_number 重命名为 reference_number - 最终大约~350 行代码。
很明显我做错了什么 - 但我该怎么做 - 这看起来很简单 - 而且是一个常见的问题?
注意 - 任何数量的付款行,具有所有不同的状态 - 都可以加入同一个参考号
代码长度可能不如 sql 代码有效,但原理是相同的。您可以提前在单独的 table 中准备新的 reference_number
字段(基于 status
)(无需加载完整的 table)。然后加入主 table,删除原来的 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;