2012-12-21 143 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表中的所有腦幹決定主動爲真 其他 - 自問題中顯示的預期輸出與該邏輯匹配。

相關問題