select 职务,
  (select top 1 A1 from t where A1 is not null and 职务=a.职务),
  (select top 1 A2 from t where A2 is not null and 职务=a.职务),
  (select top 1 A3 from t where A3 is not null and 职务=a.职务)
from t a
group by 职务

解决方案 »

  1.   

    楼上朋友的SQL有问题,我测试后得出如下结果:船长 冯康成 曾国庆 胡一心
    大副 冯康成 曾国庆 胡一心
    大管轮 冯康成 曾国庆 胡一心
    代大副 冯康成 曾国庆 胡一心
    代大管轮 冯康成 曾国庆 胡一心
    二管轮 冯康成 曾国庆 胡一心
    二水 冯康成 曾国庆 胡一心
    副水手长 冯康成 曾国庆 胡一心
    机工 冯康成 曾国庆 胡一心
    轮机长 冯康成 曾国庆 胡一心
    实习驾驶 冯康成 曾国庆 胡一心
    实习轮机 冯康成 曾国庆 胡一心
    水手长 冯康成 曾国庆 胡一心数据跟举例数据有出入,是因为我的表中的记录较多引起。
      

  2.   

    测试过程如下:
    insert ppp(name,a1,a2,a3) values('船长','冯康成',NULL,NULL)
    insert ppp values('船长',NULL,'曾国庆', NULL)
    insert ppp values('船长',NULL,NULL,'胡一心')
    insert ppp values('大副',NULL,NULL,'蔡红枫')
    insert ppp values('大副',NULL,NULL,'姚欣伟')
    insert ppp values('大副',NULL,'罗建军',NULL)
    insert ppp values('大副','陈震宙',NULL,NULL)
    insert ppp values('大副','刘震杰',NULL,NULL)
    insert ppp values('大管轮',NULL, NULL,'巨  越')
    insert ppp values('代大副',NULL, '蔡月清',NULL)select name,
      拖8=(select top 1 a1 from ppp where a1 is not null and name=ppp.name),
      拖16=(select top 1 a2 from ppp where a2 is not null and name=ppp.name),
      拖17=(select top 1 a3 from ppp where a3 is not null and name=ppp.name)
    from ppp
    group by nameselect * from ppp执行结果:
    name     拖8       拖16     拖17
    船长 冯康成 曾国庆 胡一心
    大副 冯康成 曾国庆 胡一心
    大管轮 冯康成 曾国庆 胡一心
    代大副 冯康成 曾国庆 胡一心结果跟要求又出入,是怎么回事呢?求助,感谢!!!!!!!
      

  3.   

    select name,
      拖8=(select top 1 a1 from ppp where a1 is not null and name=a.name),
      拖16=(select top 1 a2 from ppp where a2 is not null and name=a.name),
      拖17=(select top 1 a3 from ppp where a3 is not null and name=a.name)--这里要别名
    from ppp a--这里要有别名
    group by name
      

  4.   

    设别名是为了区分name是里层ppp的还是外层ppp的
      

  5.   

    http://community.csdn.net/Expert/topic/3226/3226360.xml?temp=.4644434
    参考一下 ,有启发告诉我哦