开动脑筋,写<font face='隶书' size=6 color=red>一个</font>sql语句(50分)

  • 主题发起人 主题发起人 xiakaijun
  • 开始时间 开始时间
X

xiakaijun

Unregistered / Unconfirmed
GUEST, unregistred user!
有一表(table1):WORK char(10)[key],USER char(10)[key],STATUS char(1).
STATUS 取四个值: 0:完成,1:没完成,2:不确定,3:其他。
仅当某一WORK的所有STATUS为‘0’时,表明该WORK完成
问:怎样写一个sql语句,找出所有已完成的WORK

<font color=red>注:STATUS必为CHAR</font>
 
select work from table1 where status = '0'
 
select work,user,status from table1 where status="0"
不是十分清楚你的意思,难道有很多的的status字段吗,从你说得来看只有一个status字段呀,如果只有一个可以按上面的做。
 
SELECT work_id
FROM work_table
WHERE work_id NOT IN
(SELECT work_id
FROM work_table
WHERE status <> '0')
GROUP BY work_id
 
第一、不要用work做字段名。
第二、我想表中一定有许多同work,不同user的记录,他是想找出说有某一work的
所有user的status都是0的.

SELECT DISTINCT (work)
FROM table1 a
WHERE (SELECT COUNT(status)
FROM table1
WHERE work = a.work AND status = a.status) =
(SELECT COUNT(work)
FROM table1
WHERE work= a.work) AND (status =0)

能行吗?
 
还是大虾厉害,
 
SELECT DISTINCT work
FROM table1
WHERE (SELECT COUNT(work)
FROM table1
WHERE status='0') =
(SELECT COUNT(work)
FROM table1)
 
我写的不正确
烂泥,gxg8816都可行
 
题意不清楚,表面上wuyi 和 goodpb1 都行,按照烂泥的理解,
就要向他那样写。把题意说清楚吧。
 
太罗嗦,为什么不用加操作?
select work,sum(cast(....status)) a group by work where a=0


 
一个简单的多表连接生成器,就是DataBase Desktop中的QBE query,真的是非常好
用。
 
写两个表麻,tableuser,tablework;tablework作为talbleuser的细表,有多少个work都能解决。
 
没有人会在这里用两个表。
 
gxg8816的答案应该是正确的!
 
gxg8816说的没错,我再补充一下,别给我分!
SELECT DISTINCT work_id
FROM work_table
WHERE work_id NOT IN
(SELECT DISTINCT work_id
FROM work_table
WHERE status <> '0')
 
select work max(status) a
from table1
group by work
where a=0
还需要把括号中的status用函数转变成Integer型,转变方法根据所用数据库的语言而定。
这是最快的方法。
如果把max(status)换成sum(status),你可以在程序中解码,从而得到明细,是最科学的做法.
尽量不要用子查询.
 
KERRIGAN的语句有问题可以用
SELECT WORK FROM TABLE GROUP BY C HAVING MAX(C)=0 AND MIN(C)=0
 
gxg8816说得对,DELPHIWOLF补充得好!!!
 
select work from table1
group by work
having sum(status)=0
 
不该用having.用where 才能得到过滤后的组.不信可以试试.
 
后退
顶部