注册 登录
编程论坛 ASP技术论坛

请教:写一个SQL语句的问题

相公 发布于 2008-10-23 22:37, 1454 次点击
序号    工件    日期    完成情况
7    A    1/6    完成
6    A    1/3    完成3/4
5    A    1/2    完成2/4
4    B    1/6    完成2/3
3    B    1/3    完成1/3
2    C    1/6    完成2/3
1    C    1/1    完成1/5

上面是个数据表[工件]
现在想列出还没有完成的“工件”情况,因为我用 select * from [工件] where 完成情况<>'完成'
则序号是 5和6 都会列出来了,这样不符合要求,因为 A工件已经完成了,不需要列出。
那么该如何写语句??

[[it] 本帖最后由 相公 于 2008-10-23 22:59 编辑 [/it]]
12 回复
#2
hmhz2008-10-23 22:50
你也列出不完成那就是相反的嘛
select * from [工件] where 完成情况<>'完成'
不就是等于和不等于之间的区别嘛,这个也要问?
#3
相公2008-10-23 22:53
先谢过了,
是我写错了,应该是:select * from [工件] where 完成情况<>'完成'

但是出现的情况正如我上面所说的。

[[it] 本帖最后由 相公 于 2008-10-23 22:57 编辑 [/it]]
#4
hmhz2008-10-23 23:00
你这样写当然会把5和6也列出来了,因为你用的是不等于"完成" 而5和6是"完成3/4","完成2/4" 一直到下面都会列出来的
你说 "完成" 等于 "完成2/4" 吗?
#5
相公2008-10-23 23:12
这正是我想要解决的问题,
就是 A工件已经完成了,属于A的都不需要列出。

继续指教!
#6
hmhz2008-10-23 23:16
首先你要能保证 完成情况 字段里的数据库只有两种或这三种标准的内容

比如 "完成"  "没完成" "处理中" 这样的标准格式,不能这样 "完成"  "完成3/4" "完成2/4"
因为你的内容都不固定的,你怎么去都判断是完成的?
因为你使用的是不等于来判断,如果使用的是等于来判断,也许还能使用上模糊查询来找出所有内容中包括"完成"的文字
#7
hmhz2008-10-23 23:19
你这个 "完成" 都有很多种不同的格式,这就属于脏数据了,你还怎么判断啊
#8
hmhz2008-10-23 23:35
不过刚才仔细想了一下,应该可以行的通,我先把代码写出来,没有测试,你看看行不行

select * from [工件] where instr(完成情况,"完成")=0

意思是当"完成情况"字段中包含"完成"两个字的时候就大于0,不包含"完成"的时候就等于0
#9
相公2008-10-23 23:39

序号    工件    日期    完成情况
7        A      1/6      完成
6        A      1/3      asddf
5        A      1/2      sd/4
4        B      1/6      sff
3        B      1/3      1/3
2        C      1/6      2/3
1        C      1/1      sdsa1/5

上面是个数据表[工件]

请帮我,即 A 已经“完成”时,如何只列出 B、C 来,
#10
相公2008-10-23 23:45
谢谢你,还在陪伴我
#11
yms1232008-10-23 23:56
如果是复杂的判断,估计单用一句SQL语句不好办。
#12
相公2008-10-24 00:07
select * from [工件] where 工件<>(select 工件 from [工件] where 完成情况='完成')
大概这样,但是非法。
#13
相公2008-10-24 00:22
哦,解决了
select * from [工件] where 工件 not in(select 工件 from [工件] where 完成情况='完成')

谢了
1