SQL 语法请教 ( 积分: 200 )

  • 主题发起人 主题发起人 guozi
  • 开始时间 开始时间
G

guozi

Unregistered / Unconfirmed
GUEST, unregistred user!
我前台使用Delphi开发,后台使用的是SQL Server,现在遇到了一个SQL的问题。
通过SQL语法对表中数据的过滤,得出下面结果(例如:)
班级 学号
一班 1
一班 2
一班 3
二班 1
二班 2
二班 3
现在想在得出的结果中进行进一步的过滤,需要过滤出“每一个班级的任意一条记录”即可。
我想了好久也没弄出来,希望高手能帮我解决一下。谢谢!200分
注:只想通过试图连接前台的Delphi,所以,最好不要用存储过程实现。
 
有表A,
id pid
1 1
1 2
1 3
2 1
2 2
3 1
如何化成表B:
id pid
1 1,2,3
2 1,2
3 1

创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(pid as varchar) from 表A where id=@id set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结果
select distinct id,dbo.fmerg(id) from 表A
 
不知道LZ是不是要这个效果..唉..好像发了N次这个了
 
select F1,max(F2) from A group By F1
选出每个班的最大学号
 
未看明白楼主的原意是什么,描述不清析
 
有表A,
id pid
1 1
1 2
1 3
2 1
2 2
3 1
如何化成表B:
id pid
1 1
2 1
3 1
应该是这个意思,取每个班级的任意一条记录就可以,第一笔也行。
 
你的表中是否有自动递增字段,如果没有,请建立一个,如 AutoID , 如有,就直接把AutoID改为你的字段名就行了

以下语句功能为:直接显示表A,每一个不同ID值的第一条记录

select * from a where autoid in
(select min(autoid) as autoid from a group by id)
 
Select dinstinct banji,(Select top 1 xuehao from table B where a.banji=b.banji) from table A
 
select distinct(id) as id ,max(pid) as pid from a group by id
 
非常感谢subosoft帮我解决了问题!谢谢!不过,为了感谢其他人所做的付出,也同样分配了一小部分分值给他们,希望subosoft能够谅解!再次感谢大家!
 
后退
顶部