如何加入以从 2 个不同的过滤器中做出决定

How to do a joining for making decision from 2 different filter

此映射中总共调用了 4 个表:Market、Cost、A、B,

Read_sourceTB_B-----FIL1------->---------JNR4 \
    |                                     |     |
    |    Read_sourceTB_Market--\          |     |
    |    Read_sourceTB_Cost------JNR1--\  |     |
    |    Read_sourceTB_A-----------------JNR2   JNR5--->EXP... -->TGT
    |                       |             |     |
    |                       |             |     |
    |                       |             |     |
     ---------------------FIL2->---------JNR3 /

如何做出决定 如果 A 加入 B System_Code='University' 失败,则 A 加入 B System_Code='Policy'

--First joinning condition  
A LEFT JOIN B 
ON A.MEMBERSHIPID = B.MEMBERSHIPID
Where B.System_Code='University'

IF <第一个加入条件>失败,则执行

--Second joinning condition
A LEFT JOIN B ON 
A.address = B.address and A.phonenumber = B.phonenumber

Where B.System_Code='Policy'

读取 B 数据源两次,这应该是这样的:

Read_sourceTB_Market--\         
Read_sourceTB_Cost------JNR1--\
Read_sourceTB_A-----------------JNR2-\
Read_sourceTB_B1-----FIL1---->--------JNR4--\
Read_sourceTB_B2-----FIL2---->---------------JNR5--->EXP... -->TGT

您需要根据两种不同的条件将 A 与 B 连接(两次),然后将它们连接回一个管道以获得 decision/if-else 条件。 另请注意,您所有的左联接实际上都是内部联接,因为您在 where 子句中使用了 B.xxx='something' 条件。

所以,考虑到上面的问题 -

  1. B的source qualified后,并联添加两个filter FIL1(system_Code='University')和FIL2(System_Code='Policy') .

  2. 然后使用 JNR1 在 A.MEMBERSHIPID = B_F1.MEMBERSHIPID 上使用 JOINER 连接 A 和 B(FIL1)。使用 A 作为详细信息 table 并使用 'inner join'.

  3. 然后在 A.address = B_F2.address 和 A.phonenumber = B_F2.phonenumber 上使用 JOINER(JNR2) 连接 A 和 B(FIL2)。使用 A 作为详细信息 table 并使用 'inner join'.

  4. 然后使用另一个 Joiner(JNR3) 将以上两个管道连接成一个管道。它应该是正常连接并且连接应该是 table A 的主键。获取所有必需的列。

  5. (EXP)然后使用表达式转换。使用类似于以下的逻辑。

out_col1 = IIF( isnull(col_tableB_F1_jnr1),col_tableB_F2_jnr2, col_tableB_F1_jnr1)

整个映射应该是这样的 -


SQ_TABLEB --FIL1-> -- JNR1 \
        |               |   |
        |   SQ_TABLEA --|    JNR3-->EXP.... -->TGT  
        |               |   | 
        |--FIL2-> -- JNR2  /

不过我觉得你的需求可能是这样的-

A LEFT JOIN B 
ON A.MEMBERSHIPID = B.MEMBERSHIPID AND B.System_Code='University'

如果是,则将JNR1和JNR2中的inner join改为master outer join