谁能写这个sql查询?

时间:2012-12-21 09:42:36

标签: sql sql-server sql-server-2008

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

表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,则为true,否则为false RecordId属于某个市场。 - >表tbF
每个市场都有一定的BMId映射 - > tbSB 每个Recordid都有一定的BMId映射 - > tbFM

如果BMid存在于tbFM中,则对于每条记录

,则active为真 否则,如果BMId被映射为记录市场而不是记录,那么对于该记录,Active是假的

1 个答案:

答案 0 :(得分: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

由于问题中显示的预期输出符合该逻辑,我已将Active设置为由tbFM表中的存在决定。