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都不是我要的结果,急等,谢谢
这是一个合并行的问题:
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;
select * from users where course in ('广告设计组')
或者
select * from users where courseid in (1)
难道不行?
是不是只有这2中组呢,如果是的话,在选择2个的时候直接传一个特殊的值,然后存储过程判断,如果是特殊的值就
select * from users
不然就判断。
为啥表要设计成这样呢
兄弟这事简单,你用charindex函数就可以 举个例子,比如你想要广告设计组和软件工程组,写法如下:
select * from users where charindex('1',courseid)>0 OR charindex('2',courseid)>0
这样就可以解决问题。但是接下来还要注意一点就是编号为11 也包含1,这样话,就需要个小技巧,在courseid两边分别加逗号,在查找的编号两边加引号,这样用charindex就不会有问题了