求sql的一条排序语句

abcdef9700 2009-12-28 07:32:42
一个学生表。student 里面有兴趣者字段。一个人的兴趣有多个,比如滑冰,音乐,跳舞。我想要创建一个fuction .
排列出来。请高手帮忙。谢谢很急
...全文
62 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcdef9700 2009-12-28
  • 打赏
  • 举报
回复
好了。解决了。谢谢各位了。特别是fredrickhu 。真厉害。
我可以结贴了。
zw033 2009-12-28
  • 打赏
  • 举报
回复
学习zzzzzzzzzzz
abcdef9700 2009-12-28
  • 打赏
  • 举报
回复
谢谢fredrickhu 高手。我看看你的行不行先
abcdef9700 2009-12-28
  • 打赏
  • 举报
回复
是sql server 2000
abcdef9700 2009-12-28
  • 打赏
  • 举报
回复
select StudentInfo.sID as '学号',StudentInfo.sDepartment as '部门',StudentInfo.sClassName as '班级',
StudentInfo.sName as '姓名',StudentInfo.sYears as '年龄',StudentInfo.sGender as '性别',StudentInfo.sCity as '所属城市',
StudentInfo.sDistrict as '所属县',StuIntrest.sIntrest as '兴趣' from StuIntrest,StudentInfo where StuIntrest.sID=StudentInfo.sID
and StuIntrest.sID=05
这样差出来的结果呢就是要两行次啊能显示。如
5 经济 商务 小辉 19 男 佛山市 南海区 跳舞
5 经济 商务 小辉 19 男 佛山市 南海区 音乐
我想建一个function 就可以
这样一行显示出来。
5 经济 商务 小辉 19 男 佛山市 南海区 (跳舞,音乐)
要实现的就是括号里的东西了。
谢谢各位了。
linguojin11 2009-12-28
  • 打赏
  • 举报
回复

fredrickhu 太快了。。。
linguojin11 2009-12-28
  • 打赏
  • 举报
回复
select a.*,b.sIntrest
from StudentInfo inner a join StuIntrest b on a.sID=b.sID order by sIntrestOrder

不清楚为什么要用函数。。
abcdef9700 2009-12-28
  • 打赏
  • 举报
回复
数据库版本是sql server.
很急了。希望高人指点
--小F-- 2009-12-28
  • 打赏
  • 举报
回复
明白了 这样?
合并列值
--*******************************************************************************************
表结构,数据如下:
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc

需要得到结果:
id values
------ -----------
1 aa,bb
2 aaa,bbb,ccc
即:group by id, 求 value 的和(字符串相加)

1. 旧的解决方法(在sql server 2000中只能用函数解决。)
--=============================================================================
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
--1. 创建处理函数
CREATE FUNCTION dbo.f_strUnite(@id int)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @str varchar(8000)
SET @str = ''
SELECT @str = @str + ',' + value FROM tb WHERE id=@id
RETURN STUFF(@str, 1, 1, '')
END
GO
-- 调用函数
SELECt id, value = dbo.f_strUnite(id) FROM tb GROUP BY id
drop table tb
drop function dbo.f_strUnite
go
/*
id value
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
(所影响的行数为 2 行)
*/
--===================================================================================
2. 新的解决方法(在sql server 2005中用OUTER APPLY等解决。)
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
-- 查询处理
SELECT * FROM(SELECT DISTINCT id FROM tb)A OUTER APPLY(
SELECT [values]= STUFF(REPLACE(REPLACE(
(
SELECT value FROM tb N
WHERE id = A.id
FOR XML AUTO
), ' <N value="', ','), '"/>', ''), 1, 1, '')
)N
drop table tb

/*
id values
----------- -----------
1 aa,bb
2 aaa,bbb,ccc

(2 行受影响)
*/

--SQL2005中的方法2
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go

select id, [values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')), 1, 1, '')
from tb
group by id

/*
id values
----------- --------------------
1 aa,bb
2 aaa,bbb,ccc

(2 row(s) affected)

*/

drop table tb
ACMAIN_CHM 2009-12-28
  • 打赏
  • 举报
回复
楼主能认真念一下= #2楼的文字吗?
abcdef9700 2009-12-28
  • 打赏
  • 举报
回复
我想要的是查出来的结果是一个学生一行。兴趣排列在一起。
abcdef9700 2009-12-28
  • 打赏
  • 举报
回复
5 经济 商务 小辉 19 男 佛山市 南海区 跳舞
5 经济 商务 小辉 19 男 佛山市 南海区 音乐
这个查询结果是错误的。
我查询出来的是一个学生一行。
linguojin11 2009-12-28
  • 打赏
  • 举报
回复
莫非是需要:
select *
from tablename
order by charindex(','+columnname+',',','+'滑冰,音乐,跳舞'+',')
abcdef9700 2009-12-28
  • 打赏
  • 举报
回复
不好意思。是我的表达能力差了点。应该是这样的。其实有两个表。
表1:学生信息表-StudentInfo.
字段名称 字段类型 备注
sID Int 学生学号
sDepartment Varchar(20) 所属系
sClassName Varchar(20) 所属班级
sName Varchar(20) 学生姓名
sYears Int 学生年龄
sGender Varchar(5) 性别
sCity Varchar(50) 籍贯所在城市
SDistrict Varchar(50) 籍贯所在区县
表2:学生兴趣表-StuIntrest
字段名称 字段类型 备注
sID Int 学生学号
sIntrest Varchar(20) 学生兴趣
sIntrestOrder Int 学生兴趣排序


就是学生的兴趣有多个。要进行排序。
就要建一个function
.
.
--小F-- 2009-12-28
  • 打赏
  • 举报
回复
恩 最好给点数据来说明问题
其实如果单纯的排序
直接
select * from tb order by 兴趣者,兴趣就OK了 不需要函数的
ACMAIN_CHM 2009-12-28
  • 打赏
  • 举报
回复
不知所云,你想的功能到底是什么? (不要高估你的汉语表达能力或者我的汉语理解能力)

建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

jilezhenren 2009-12-28
  • 打赏
  • 举报
回复
create function table(@studentid int)
return table
as
return (select 滑冰,音乐,跳舞 from student where studentid=@studentid)
go

select * from table(1)

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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