怎么写这样的SQL语句?(100分)

  • 主题发起人 主题发起人 少爷的拐杖
  • 开始时间 开始时间

少爷的拐杖

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样一个表

姓名 状况 时间
————————
张三 门诊 2001-05-05
李四 保健 2001-05-05
王五 学习 2001-05-05
张三 保健 2001-05-06
李四 保健 2001-05-06
王五 学习 2001-05-06
张三 门诊 2001-05-07
李四 门诊 2001-05-07
王五 学习 2001-05-07
张三 学习 2001-05-08
李四 保健 2001-05-08
王五 学习 2001-05-08
。。。。
怎样可以用最少的查询得到以下的数据?
门诊 保健 学习
张三 2 1 1
李四 1 3 0
。。。。。
一句SQL语句能实现么?不能的话我就要把查询写在循环里啦!!

另:请推荐一本讲述SQL语言的好书行吗?
 
我在旁边等着答案呢。。。
 
大家加油回答啊。怎么没人来说两句呢?
 
呵呵,写了一句,你可不要昏倒 :)
表结构:
CREATE TABLE [dbo].[test] (
[name] [char] (10) NULL ,
[status] [char] (10) NULL
) ON [PRIMARY]
语句:
select isnull(isnull(a.name,b.name),c.name) as 姓名,isnull(a.门诊,0) as 门诊,isnull(b.保健,0) as 保健,isnull(c.学习,0) as 学习 from (select name,count(status) as 门诊 from test where status='门诊' group by name) a full outer join (select name,count(status) as 保健 from test where status='保健' group by name) b on a.name=b.name full outer join (select name,count(status) as 学习 from test where status='学习' group by name) c on a.name=c.name
结果:
姓名 门诊 保健 学习
---------- ----------- ----------- -----------
李四 1 3 0
张三 2 1 1
王五 0 0 4

(3 row(s) affected)
 
我实在sql server中实现的
 
to Sportsman:
怎么实现的?
 
to Sportsman:
我试试。。。有点恐怖。。。不过如果可行。这100大洋可就是您的啦。
 
呵呵,我可是试过了才给你的,放心 :)
 
基本是正确的。不过我把您给的语句替换成我自己的字段名之后。结果中出现了一个重复
的名字。我想改。。可是不会改。实在太长了。看不懂。
我再好好研究您给的代码吧。
不过很感谢您。我给您加分了。
 
接受答案了.
 
select T1.姓名, (select Count(*) from 表名 T2 where T2.状况 = '门诊' and Names = T1.names) as 门诊
,(select Count(*) from 表名 T2 where T2.状况 = '保健' and Names = T1.names) as 保健
,(select Count(*) from 表名 T2 where T2.状况 = '学习' and Names = T1.names) as 学习
from 表名 T1
group by T1.姓名
 
喂!这就接受答案啦,没追求
 
to Cobra
确实是你的好,100分是你的 :) ID=533503

不能重复输入,只能来这招 :)
 
啊!Cobra的没重复。而且写的比较清楚。要不我另开个问题让你讲讲原理好么?
 
后退
顶部