在 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 中做某些事情。

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;