当前位置: 代码迷 >> Sql Server >> 在一张表里,如果一个字段,有几个值,怎么处理呢?
  详细解决方案

在一张表里,如果一个字段,有几个值,怎么处理呢?

热度:89   发布时间:2016-04-27 15:45:25.0
在一张表里,如果一个字段,有几个值,怎么办呢??
在一张表里,如果一个字段,有几个值,怎么办呢??  
比如一张学生表
有几个字段,分别是姓名,性别,年龄,兴趣而兴趣这个字段有可能有几个值并存,
比如:
画画,写作,看书  
怎么解决啊  
 
有大侠传授我:
另建一张表,用ID关联起来,
例:
表   学生:
Id                 姓名         年龄
1                   A               b
2                   B               c    

表   兴趣:
ID               学生Id       兴趣
1                 1                 d
2                 1                 e

但问题是:我的这个数据库中,可以多选的字段太多,有23个呢
怎么做啊?
请问是做23张子表吗?这么麻烦啊?

------解决方案--------------------
create table student(Id int,姓名 varchar(10),年龄 varchar(10))
insert into student values(1, 'A ', 'b ')
insert into student values(2, 'B ', 'c ')

create table interest(ID int,学生Id int,兴趣 varchar(10))
insert into interest values(1,1, 'd ')
insert into interest values(2,1, 'e ')
go

create function f_str(@stu_id int)
returns varchar(20)
as
begin
declare @str varchar(20)
set @str= ' '

select @[email protected]+ ', '+兴趣 from interest where [email protected]_id

set @str=stuff(@str,1,1, ' ')

return @str
end
go

select *,dbo.f_str(ID) as 兴趣 from student
/*
Id 姓名 年龄 兴趣
----------- ---------- ---------- --------------------
1 A b d,e
2 B c NULL
*/
go

drop function f_str
drop table student,interest
go
------解决方案--------------------
accsee的話,可能用第2個方式比較好操作,

表 学生:
Id 姓名 年龄
1 A b
2 B c

表 兴趣:
ID 学生Id 兴趣
1 1 d
2 1 e

------解决方案--------------------
对啦,这个问题已经说得很清楚了哦,就象银行的存款一样,用户有好多个,他们每一个人的存款笔数都是无限制的,人家无限制的笔数存款都是用上面的方法处理的。
你一个兴趣怎么会存不下呢。
另外如果你的兴趣种类是固定的,也可以这样来设计,弄一个兴趣里面不可能包含的字符进行分隔各个兴趣,登录用¥¥来分隔,兴趣:吃饭¥¥穿衣¥¥睡觉¥¥走路 等,然后读出这个字段时再将得到的字符串进行分解得到兴趣系列就行了。
  相关解决方案