首页 新闻 搜索 专区 学院

需求一个SQL语句。达到and的效果。谢谢

0
悬赏园豆:10 [已解决问题] 解决于 2008-07-29 12:48
<P>数据库里有一个表,主要有两个字段 [姓名],[技能]</P> <P>可能的数据如下</P> <P>[姓名]&nbsp;&nbsp;[技能]<BR>甲&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 技能1<BR>甲&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 技能2<BR>甲&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 技能3<BR>乙&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 技能1<BR>乙&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 技能2<BR>乙&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 技能4<BR>丙&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 技能2<BR>丙&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;技能3<BR>丁&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 技能1<BR>丁&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 技能4</P> <P>......</P> <P>现在我想找到拥有技能1,同时还拥有技能2的人。</P> <P>希望能够通过一个sql语句得到这样的结果</P> <P>[姓名]&nbsp;&nbsp;[技能]<BR>甲&nbsp;&nbsp;技能1<BR>甲&nbsp;&nbsp;技能2<BR>乙&nbsp;&nbsp;技能1<BR>乙&nbsp;&nbsp;技能2</P> <P>丙拥有技能2,但是没有技能1,不能显示出来。<BR>丁只有技能1没有技能2也不能显示。<BR></P> <P>想了大约两个小时没有想出来,希望大家能够帮帮忙。谢谢。</P>
问题补充: 不仅是两个技能,也可能是三个或者多个技能一起查。 另外还会有其他的查询条件,当然其他的就只有一个关键字了。
金色海洋(jyk)的主页 金色海洋(jyk) | 菜鸟二级 | 园豆:290
提问于:2008-07-14 19:18
< >
分享
最佳答案
0
with t_cn as ( select 姓名,技能,cn = COUNT(*) OVER(PARTITION BY 姓名) from tableName WHERE 技能 = '技能1' OR 技能 = '技能2' )select 姓名,技能 from t_cn where cn = 2
玉开 | 大侠五级 |园豆:8822 | 2008-07-15 08:45
其他回答(8)
0
是不是这个效果: select * from [Name] where 姓名 in (select 姓名 from [Name] where 姓名 in (select 姓名 from [Name] where 技能='技能1') and 技能='技能2') and 技能='技能1' union select * from [Name] where 姓名 in (select 姓名 from [Name] where 姓名 in (select 姓名 from [Name] where 技能='技能1') and 技能='技能2') and 技能='技能2'
侯垒 | 园豆:3435 (老鸟四级) | 2008-07-14 19:52
0
select t1.姓名 from 技能表 t1 join 技能表 t2 on t1.姓名 = t2.姓名 (...) where t1.技能 ='技能1' and t2.技能 = '技能2' (...) 可以在(...)处加上新的join和条件来找有三个或四个技能的人.
deerchao | 园豆:8167 (大侠五级) | 2008-07-14 21:14
0
select 姓名,技能 from table1 where 姓名 in (select a.姓名 from table1 a , table1 b where a.技能='技能1' and b.技能='技能2' and a.姓名=b.姓名) select a.姓名 from table1 a , table1 b where a.技能='技能1' and b.技能='技能2' and a.姓名=b.姓名-->查询同时拥有两个技能的人的姓名
南风 | 园豆:205 (菜鸟二级) | 2008-07-15 01:32
0
假设您的表名叫Table1,则语句如下: select 姓名,技能 from Table1 where 姓名 in( SELECT 姓名 FROM Table1 WHERE 技能 in ( '技能1','技能2') GROUP BY 姓名 HAVING (COUNT(姓名) = 2) ) and 技能 in ( '技能1','技能2') ----------------- 如果你的技能不确定是几个,那就将 '技能1','技能2' 换成一个select 语句,取出你想要的技能;COUNT(姓名) = 2 这里的2表示有几个技能,也可以换成select count(XX) from 您这里大概是某技能表吧 。
致博腾远 | 园豆:1389 (小虾三级) | 2008-07-15 08:51
0
楼上的说得正是
放飞心情 | 园豆:130 (初学一级) | 2008-07-15 20:12
0
玉开的牛!
IamV | 园豆:180 (初学一级) | 2008-07-16 09:54
0
DECLARE @temp VARCHAR(20) --申明变量, 也就是输入参数 SET @temp='a,b' --为变量赋值 WITH aa(a,b,c,d) AS --处理数据库中数据 ( SELECT benji,ASCII(shangji),1,shangji FROM [dengji] UNION ALL SELECT benji,b+ASCII(SUBSTRING(shangji,c+1,1)),c+1,shangji FROM aa ,dengji WHERE dengji.[benji]=aa.a AND dengji.[shangji]=aa.d AND c<len(shangji) ), bb AS ( SELECT a,d,MAX(b)AS b FROM aa GROUP BY a,d ), cc AS --得到处理结果 ( SELECT a,d,SUM(b) OVER (PARTITION BY a) AS b FROM bb ), dd(b,a) AS --处理传入参数 ( SELECT ASCII(@temp),1 UNION ALL SELECT b+ASCII(SUBSTRING(REPLACE(@temp,',',''),a+1,1)),a+1 FROM dd WHERE a<len(REPLACE(@temp,',','')) ), ff AS --匹配数据 ( SELECT a,b,d FROM cc WHERE cc.b=(SELECT MAX(dd.b) FROM dd) ), ee AS --验证数据正确行,二次过滤 ( SELECT *,COUNT(a) OVER (PARTITION BY a) AS c FROM ff WHERE @temp LIKE '%'+d+'%' ) SELECT a,d FROM ee --得到结果 只需要用,号将要包含的字段内容隔开就可以了。拓展性极高
KindSoul | 园豆:245 (菜鸟二级) | 2008-07-18 14:11
0
哪那么多技能~~长见识了
陈修国 | 园豆:205 (菜鸟二级) | 2008-07-22 02:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册