猿问

求一个sql语句,在线等,急着要,谢谢各位大虾...

id            schoolId          schoolName              course

1             1                     崇州电子职业学院        广告设计组

2             1                     崇州电子职业学院       软件工程组

这个是教师组表,course

 

一个教师可以属于多个组,如软件工程组,软件工程组,等等,

select  username,courseid,course from users

username           courseid(varchar)           course

test                      1,2                   广告设计组,软件工程组

张三                      1                      广告设计组

李四                      2                      软件工程组

,现在我要的结果是如果我选择广告设计组,结果是

test                      1,2                   广告设计组,软件工程组

张三                      1                      广告设计组

,如果我选择的是软件工程组,

test                      1,2                   广告设计组,软件工程组

李四                      2                      软件工程组

 如果我选择了广告设计组和软件工程组,那么结果应该是:

 

test                      1,2                   广告设计组,软件工程组

test                      1,2                   广告设计组,软件工程组

张三                      1                      广告设计组

李四                      2                      软件工程组

 

,该怎么写sql语句啊 ,我用了in和exists都不是我要的结果,急等,谢谢

繁星点点滴滴
浏览 596回答 9
9回答

桃花长相依

这是一个合并行的问题: SqlServer的解决方案: select  username, courseids = STUFF((select ','+courseid from users where username = U.username FOR XML PATH(' '),1,1,''),  courses = STUFF((select ','+course from users where course= U.courseFOR XML PATH(' '),1,1,'') from users U group by users;

慕婉清6462132

select * from users where course in ('广告设计组') 或者 select * from users where courseid in (1)   难道不行?

素胚勾勒不出你

不行,我试过了...

慕姐4208626

是不是只有这2中组呢,如果是的话,在选择2个的时候直接传一个特殊的值,然后存储过程判断,如果是特殊的值就 select * from users 不然就判断。

森林海

为啥表要设计成这样呢

墨色风雨

兄弟这事简单,你用charindex函数就可以 举个例子,比如你想要广告设计组和软件工程组,写法如下: select * from users where charindex('1',courseid)>0 OR charindex('2',courseid)>0 这样就可以解决问题。但是接下来还要注意一点就是编号为11 也包含1,这样话,就需要个小技巧,在courseid两边分别加逗号,在查找的编号两边加引号,这样用charindex就不会有问题了
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答