2012-12-21 95 views
-1

我不是专家的查询作家。抓住我的头在这一个。任何人都可以帮我解决这个问题吗?任何人都可以给我写这个sql查询吗?

表TBF

RecordId  MarketId 

    101   1 
    102   1 
    201   2 
    301   3 

表TBSB

MarketId   BMId 

    1   3 
    1   5 
    2   1  
    2   2 
    2   3 
    2   4 
    2   5 
    3   1 

表tbFM

RecordId BMId 

101   3 
102   3 
102   5 
201   1 
201   3 
201   4 

现在我想一个输出

Record Id MarketId BMId  Active 
    101  1  3   true 
    101  1  5   false 
    102  1  3   true 
    102  1  5   true 
    201  2  1   true 
    201  2  2   false 
    201  2  3   true 
    201  2  4   true 
    201  2  5   false 
    301  3  1   false   

活动列 - >

如果记录ID存在被映射到特定的BMId其真正的其他假 RecordId属于市场。 - >表TBF
每个市场都有BMId的某些没有被映射为它 - > TBSB 每个的recordId具有一定BMId的没有映射为它 - > tbFM

对于每个记录,如果BMid存在于tbFM那么如果BMId被映射为记录市场,而不是备案,然后该记录活动是假的

+2

你能解释一下active:true/false – GeorgesD

+0

你想要“Active”字段的信息来自哪里? – Guffa

+0

你能告诉我,什么是活动的,你没有在你的表中指定这个专栏 – Ravi

回答

1
SELECT 
    f.RecordId 
    , f.MId 
    , s.BMId 
    , Active = CASE 
    WHEN m.RecordID is null THEN 'false' 
    ELSE 'true' 
    END 
FROM tbF f 
INNER JOIN tbSB s ON f.MId = S.MId 
LEFT JOIN tbFM m ON m.RecordId = f.RecordID AND m.BMId = s.BMId 

我已经采取了积极通过tbFM表中的所有脑干决定主动为真 其他 - 自问题中显示的预期输出与该逻辑匹配。

相关问题