-1

我不是专家查询作者。为这个挠头。谁能帮我解决这个问题?

表 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 else false RecordId 属于市场。--> Table tbF
每个市场都有一定数量的 BMId 映射给它 -->tbSB 每个 Recordid 都有一定数量的 BMId 映射给它 -->tbFM

对于每条记录,如果 BMid 存在于 tbFM 中,则 active 为真,否则如果 BMId 映射到记录市场而不是记录,则该记录的 Active 为假

4

1 回答 1

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 表中的存在来确定 - 因为问题中显示的预期输出与该逻辑相匹配。

于 2012-12-21T09:48:38.450 回答