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

解决方案 »

  1.   

    ---测试数据---
    if object_id('[corp]') is not null drop table [corp]
    go
    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 [联系人表]
    go
    create table [联系人表]([linkman_id] int,[linkman_name] varchar(6),[linkman_tel] int,[corp_id] int,[linkman_main] int)
    insert [联系人表]
    select 1,'张飞',123456789,1,1 union all
    select 2,'小强',987654321,1,1 union all
    select 3,'小宝',123123123,2,1 union all
    select 4,'王麻子',456456456,2,0 union all
    select 5,'张德帅',789789789,3,0
     
    ---查询---
    select a.corp_id,a.corp_name,b.linkman_id,b.linkman_name,b.linkman_tel 
    from corp a
    left join [联系人表] b
    on a.corp_id=b.corp_id
    and not exists(
      select 1 
      from 联系人表 
      where corp_id=b.corp_id 
      and (linkman_main>b.linkman_main or linkman_main=b.linkman_main and linkman_id<b.linkman_id)
    )---结果---
    corp_id     corp_name linkman_id  linkman_name linkman_tel 
    ----------- --------- ----------- ------------ ----------- 
    1           上海大众      1           张飞           123456789
    2           长江实业      3           小宝           123123123
    3           东方航空      5           张德帅          789789789(所影响的行数为 3 行)
      

  2.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2010-02-03 18:22:43
    -- Version:
    --      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    -- Nov 24 2008 13:01:59 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:[客户表]
    if object_id('[客户表]') is not null drop table [客户表]
    go 
    create table [客户表]([corp_id] int,[corp_name] varchar(8))
    insert [客户表]
    select 1,'上海大众' union all
    select 2,'长江实业' union all
    select 3,'东方航空'
    --> 测试数据:[联系人表]
    if object_id('[联系人表]') is not null drop table [联系人表]
    go 
    create table [联系人表]([linkman_id] int,[linkman_name] varchar(6),[linkman_tel] int,[corp_id] int,[linkman_main] int)
    insert [联系人表]
    select 1,'张飞',123456789,1,1 union all
    select 2,'小强',987654321,1,1 union all
    select 3,'小宝',123123123,2,1 union all
    select 4,'王麻子',456456456,2,0 union all
    select 5,'张德帅',789789789,3,0
    --------------开始查询--------------------------
    select
     a.corp_id,a.corp_name,b.linkman_id,b.linkman_name,b.linkman_tel 
    from
     [客户表] a
    left join [联系人表] b on 
     a.corp_id=b.corp_id
    and
     not exists(select
                   1 
                from
                  [联系人表]
                where
                 (corp_id=b.corp_id 
               and
                 linkman_main>b.linkman_main) or(corp_id=b.corp_id  and linkman_main=b.linkman_main and linkman_id<b.linkman_id))----------------结果----------------------------
    /* corp_id     corp_name linkman_id  linkman_name linkman_tel
    ----------- --------- ----------- ------------ -----------
    1           上海大众      1           张飞           123456789
    2           长江实业      3           小宝           123123123
    3           东方航空      5           张德帅          789789789(3 行受影响)
    */