客户表corp
corp_id   corp_name
 1          上海大众
 2          长江实业
 3          东方航空
---
联系人表
linkman_id  linkman_name    corp_id(所属客户ID)  linkman_main(是否是主联系人,1表示是)
    1          张飞                  1                   1
    2          小强                  1                   1
    3          小宝                  2                   1
    4         王麻子                 2                   0
    5         张德帅                 3                   0
---
如果某客户对应联系人表中有多个主联系人,将第一个做为默认联系人
如果某客户对应联系人表中只有一个主联系人,将此做为默认联系人
如果某客户对应联系人表中没有主联系人,将第一个联系人作为默认联系人最后得到
corp_id      corp_name    linkman_name
 1          上海大众          张飞
 2          长江实业          小宝
 3          东方航空          张德帅

解决方案 »

  1.   

    --> 测试数据:[客户表corp]
    if object_id('[客户表corp]') is not null drop table [客户表corp]
    create table [客户表corp]([corp_id] int,[corp_name] varchar(8))
    insert [客户表corp]
    select 1,'上海大众' union all
    select 2,'长江实业' union all
    select 3,'东方航空'
    --> 测试数据:[联系人表]
    if object_id('[联系人表]') is not null drop table [联系人表]
    create table [联系人表]([linkman_id] int,[linkman_name] varchar(6),[corp_id] int,[linkman_main] int)
    insert [联系人表]
    select 1,'张飞',1,1 union all
    select 2,'小强',1,1 union all
    select 3,'小宝',2,1 union all
    select 4,'王麻子',2,0 union all
    select 5,'张德帅',3,0select *,
    isnull((select top 1 [linkman_name] from [联系人表] where [corp_id]=t.[corp_id] and [linkman_main] = 1),
    (select top 1 [linkman_name] from [联系人表] where [corp_id]=t.[corp_id]))
    as [linkman_name]
    from [客户表corp] t 
    ---------------------------------
    1 上海大众 张飞
    2 长江实业 小宝
    3 东方航空 张德帅
      

  2.   


    if object_id('tempdb.dbo.#corp') is not null
     drop table #corp;
    gocreate table #corp(corp_id int,corp_name varchar(50))
    insert #corp
    select 1,'上海大众' union all
    select 2,'长江实业' union all
    select 3,'东方航空'
    if object_id('tempdb.dbo.#linkman') is not null
     drop table #linkman;
    gocreate table #linkman(linkman_id int,linkman_name varchar(20),corp_id int,link_main bit)
    insert #linkman
    select 1,'张飞',1,1 union all
    select 2,'小强',1,1 union all
    select 3,'小宝',2,1 union all
    select 4,'王麻子',2,0 union all
    select 5,'张德帅',3,0select * from #corp
    select * from #linkmanselect a.corp_id, a.corp_name,b.linkman_name
    from #corp a inner join 
    (
    select corp_id,
    max(case when link_main = 1 then linkman_name when link_main = 0 then linkman_name end) linkman_name  
    from #linkman group by corp_id
    ) b on a.corp_id = b.corp_idcorp_id     corp_name                                          linkman_name         
    ----------- -------------------------------------------------- -------------------- 
    1           上海大众                                               张飞
    2           长江实业                                               小宝
    3           东方航空                                               张德帅(所影响的行数为 3 行)
      

  3.   

    谢谢大家
    如果要得到
    corp_id      corp_name    linkman_name  linkman_id
    1          上海大众          张飞                1
    2          长江实业          小宝                 3
    3          东方航空          张德帅                5
    应该如何写
      

  4.   

    既然前面已经能得到了,那select里把linkman_name,linkman_id也读出来吧
      

  5.   

    select c.corp_id,c.corp_name ,tt.linkman_name from [客户表corp] c
    ,(select linkman_name,corp_id from [联系人表] l,(select min(linkman_id) as linkman_id from [联系人表] l group by l.corp_id) li
      where  l.linkman_id =li.linkman_id
    ) tt where tt.corp_id=c.corp_id 
      

  6.   

    /*
    corp_id     corp_name                                          linkman_name         
    ----------- -------------------------------------------------- -------------------- 
    1           上海大众                                               张飞
    2           长江实业                                               小宝
    3           东方航空                                               张德帅*/