一个循环查询的存储过程问题

MarcuseXiao 2003-08-07 02:36:56
我有一个学生库,这个学生库中是全校的学生,
我要查到他的兄弟姐妹(个数不定,有可能一个没有,有可能有多个)的情况,
如果SiblingGroupID相同则是一家的
...全文
38 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2003-08-07
  • 打赏
  • 举报
回复
转横,就是交叉表啦.


假设你的学生表中有两个字段:Sibling,name
要将Sibling相同的name转横.

--为数据处理生成临时表
select id=identity(int,1,1),Sibling,name into #tb from 学生表

--生成查询的查询语句
declare @i int,@im varchar(20),@sql varchar(8000)

select @sql='',@i=aa,@im=cast(aa-1 as varchar)
from(select top 1 Sibling,count(Sibling) as aa
from #tb group by Sibling order by count(Sibling) desc) a

while @i>0
select @sql=char(13)+',max(case id % '+@im+' when '+cast(@i-1 as varchar)
+' then name end) as [name'+cast(@i as varchar)+']'+@sql
,@i=@i-1
set @sql='select Sibling'+char(13)+@sql
+char(13)+'from #tb group by Sibling'

--执行生成的SQL语句,得到结果
exec(@sql)
MarcuseXiao 2003-08-07
  • 打赏
  • 举报
回复
而且我是想把它的Sibling(兄弟姐妹)的基本情况找到,不是找到有Sibling(兄弟姐妹)学生
MarcuseXiao 2003-08-07
  • 打赏
  • 举报
回复
谢谢你们!
其实我最终的目的是想在水晶表里打印出来,Sibling(兄弟姐妹)放在一格里,
也说是想把重复记录转横
CrazyFor 2003-08-07
  • 打赏
  • 举报
回复
select * from 学生库 where SiblingGroupID in (select SiblingGroupID from 学生库 group by SiblingGroupID having count(*)>1)
txlicenhe 2003-08-07
  • 打赏
  • 举报
回复
--1.创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(SiblingGroupID as varchar) from 学生表 where id=@id
set @str=right(@str,len(@str)-1)
return(@str)
go

--调用自定义函数得到结果
select distinct 学号,dbo.fmerg(SiblingGroupID) from 学生表

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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