这种存储过程如何实现(挑战高手)

kinmax 2004-07-29 01:51:42
表TABLE1如下:
职务 A1 A2 A3
船长 冯康成 NULL NULL
船长 NULL 曾国庆 NULL
船长 NULL NULL 胡一心
大副 NULL NULL 蔡红枫
大副 NULL NULL 姚欣伟
大副 NULL 罗建军 NULL
大副 陈震宙 NULL NULL
大副 刘震杰 NULL NULL
大管轮 NULL NULL 巨 越
代大副 NULL 蔡月清 NULL
........

如何得到如下报表:
职务 A1 A2 A3
船长 冯康成 曾国庆 胡一心
大副 刘震杰 NULL 蔡红枫
大管轮 NULL NULL 巨 越
代大副 NULL 蔡月清 NULL
.......

注意:表TABLE1中记录较多,以上只是若干数据。并且报表用存储过程实现,谢谢指教!



...全文
143 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
donaldtyp 2004-07-30
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3226/3226360.xml?temp=.4644434
参考一下 ,有启发告诉我哦
kinmax 2004-07-29
  • 打赏
  • 举报
回复
哦,感谢指教。
pbsql 2004-07-29
  • 打赏
  • 举报
回复
设别名是为了区分name是里层ppp的还是外层ppp的
WangZWang 2004-07-29
  • 打赏
  • 举报
回复
有何规律?
kinmax 2004-07-29
  • 打赏
  • 举报
回复
呵呵,对咯,但是不知道为什么设个别名就OK了呢,搞不明白,望指教。
pbsql 2004-07-29
  • 打赏
  • 举报
回复
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
kinmax 2004-07-29
  • 打赏
  • 举报
回复
测试过程如下:
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 name

select * from ppp

执行结果:
name 拖8 拖16 拖17
船长 冯康成 曾国庆 胡一心
大副 冯康成 曾国庆 胡一心
大管轮 冯康成 曾国庆 胡一心
代大副 冯康成 曾国庆 胡一心

结果跟要求又出入,是怎么回事呢?求助,感谢!!!!!!!
pbsql 2004-07-29
  • 打赏
  • 举报
回复
语句没问题,你的数据本身就是那样的
kinmax 2004-07-29
  • 打赏
  • 举报
回复
楼上朋友的SQL有问题,我测试后得出如下结果:

船长 冯康成 曾国庆 胡一心
大副 冯康成 曾国庆 胡一心
大管轮 冯康成 曾国庆 胡一心
代大副 冯康成 曾国庆 胡一心
代大管轮 冯康成 曾国庆 胡一心
二管轮 冯康成 曾国庆 胡一心
二水 冯康成 曾国庆 胡一心
副水手长 冯康成 曾国庆 胡一心
机工 冯康成 曾国庆 胡一心
轮机长 冯康成 曾国庆 胡一心
实习驾驶 冯康成 曾国庆 胡一心
实习轮机 冯康成 曾国庆 胡一心
水手长 冯康成 曾国庆 胡一心

数据跟举例数据有出入,是因为我的表中的记录较多引起。
pbsql 2004-07-29
  • 打赏
  • 举报
回复
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 职务

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧