CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

关于综合查询的问题,望高手解决。。。。。。。在线等。。。。。

楼主zhui9(Study)2004-08-01 10:39:29 在 MS-SQL Server / 基础类 提问

小弟有个Select的问题,求高手帮忙。  
   
  -------------  
  有如下几张表:  
   
  项目表(表名:XM),数据如下:  
   
  XMBH(项目编号)   MC(名称)   WZ(位置)  
  A                                 B超                 1  
  AN103                         乙肝三系       2  
  AN110                         血常规           3  
  AN119                         尿常规           3  
  AN150                         血型               2  
   
   
  总表(表名:ZB)  
   
  XMBH(项目编号)   ZXR(执行人)  
  AN119                         fw  
  AN119                         sx  
  AN103                         sx  
  AN103                         sx  
  AN150                         whw  
   
   
  用户表(表名:YH)  
   
  BH(编号)   YHM(用户名)  
  fw                   方为  
  sx                   沈翔  
  whw                 王卫红  
  ljq                 刘建奇  
   
   
  要求Select结果:  
   
  YHM(用户名)   WZ1       WZ2       WZ3  
  方为                     0           0           1  
  沈翔                     0           2           1  
  王卫红                 0           1           0  
  刘建奇                 0           0           0  
  ----------------  
  即结果根据用户名进行统计。按位置进行工作量的计算。 问题点数:100、回复次数:19Top

1 楼yesterday2000(一笑而过)回复于 2004-08-01 10:41:30 得分 5

wz1,wz2,wz3是什么?  
  怎么得到的  
  是HIS系统吧Top

2 楼sankis()回复于 2004-08-01 10:47:21 得分 15

一定要用SELECT吗?Top

3 楼sankis()回复于 2004-08-01 10:48:02 得分 0

这些表是通过什么对应的?Top

4 楼yesterday2000(一笑而过)回复于 2004-08-01 10:49:18 得分 0

看了半天没有看明白是怎么回事?  
  楼主能不能说明白一些Top

5 楼zjcxc(邹建)回复于 2004-08-01 10:49:49 得分 80

--WZ固定就1,2,3三种?  
   
  select   a.YHM,  
  WZ1=sum(case   b.WZ   when   1   then   1   else   0   end),  
  WZ2=sum(case   b.WZ   when   2   then   1   else   0   end),  
  WZ3=sum(case   b.WZ   when   3   then   1   else   0   end)  
  from   YH   a  
  join   ZB   ab   on   a.BH=ab.ZXR  
  join   XM   b   on   b.XMBH=ab.XMBH  
  group   by   a.YHM  
  Top

6 楼zjcxc(邹建)回复于 2004-08-01 10:53:05 得分 0

--测试  
   
  --测试数据  
  create   table   XM(XMBH   varchar(10),MC   varchar(10),WZ   int)  
  insert   XM   select   'A'         ,'B超'         ,1  
  union   all   select   'AN103','乙肝三系',2  
  union   all   select   'AN110','血常规'     ,3  
  union   all   select   'AN119','尿常规'     ,3  
  union   all   select   'AN150','血型'         ,2  
   
  create   table   ZB(XMBH   varchar(10),ZXR   varchar(10))  
  insert   ZB   select   'AN119','fw'  
  union   all   select   'AN119','sx'  
  union   all   select   'AN103','sx'  
  union   all   select   'AN103','sx'  
  union   all   select   'AN150','whw'  
   
  create   table   YH(BH   varchar(10),YHM   varchar(10))  
  insert   YH   select   'fw'   ,'方为'  
  union   all   select   'sx'   ,'沈翔'  
  union   all   select   'whw','王卫红'  
  union   all   select   'ljq','刘建奇'  
  go  
   
  --查询  
  select   a.YHM,  
  WZ1=sum(case   b.WZ   when   1   then   1   else   0   end),  
  WZ2=sum(case   b.WZ   when   2   then   1   else   0   end),  
  WZ3=sum(case   b.WZ   when   3   then   1   else   0   end)  
  from   YH   a  
  join   ZB   ab   on   a.BH=ab.ZXR  
  join   XM   b   on   b.XMBH=ab.XMBH  
  group   by   a.YHM  
  go  
   
  --删除测试  
  drop   table   xm,yh,zb  
   
  /*--测试结果  
   
  YHM                 WZ1                   WZ2                   WZ3                    
  ----------   -----------   -----------   -----------    
  方为                   0                       0                       1  
  沈翔                   0                       2                       1  
  王卫红                 0                       1                       0  
   
  (所影响的行数为   3   行)  
  --*/Top

7 楼hmily1688(没什么好说的)回复于 2004-08-01 10:53:59 得分 0

倒!!!我刚看明白是怎么回事,老大已经把答案给贴出来了Top

8 楼yesterday2000(一笑而过)回复于 2004-08-01 10:55:05 得分 0

晕!!!我还没看明白是怎么回事,老大已经把答案给贴出来了  
  Top

9 楼sankis()回复于 2004-08-01 10:55:07 得分 0

CREATE   table   table1   (YHM   varchar(20),   WZ1   int,   WZ2   int,   WZ3   int,   XMBH   varchar(20))  
  Insert   table1   (YHM,   WZ1,   WZ2,   WZ3)   Select   YHM,   0,   0,   0   From   YH  
  Update   table1   set   XMBH   =   S.XMBH   From   ZB   S   Where   ZXR   =   BH  
  Update   table1   Set   WZ1   =   WZ   From   XM   S,   table1   A   Where   A.XMBH   =   S.XMBH   And   WZ   =1  
  Update   table1   Set   WZ2   =   WZ   From   XM   S,   table1   A   Where   A.XMBH   =   S.XMBH   And   WZ   =2  
  Update   table1   Set   WZ3   =   WZ   From   XM   S,   table1   A   Where   A.XMBH   =   S.XMBH   And   WZ   =3  
   
   
  Top

10 楼zjcxc(邹建)回复于 2004-08-01 10:55:28 得分 0

--如果WZ不固定,则改用动态SQL:  
   
  declare   @s   varchar(8000)  
  set   @s=''  
  select   @s=@s+',[WZ'+cast(WZ   as   varchar)+']=sum(case   b.WZ   when   '  
  +cast(WZ   as   varchar)+'   then   1   else   0   end)'  
  from   XM  
  group   by   WZ  
  exec('select   a.YHM'+@s+'  
  from   YH   a  
  join   ZB   ab   on   a.BH=ab.ZXR  
  join   XM   b   on   b.XMBH=ab.XMBH  
  group   by   a.YHM')Top

11 楼sankis()回复于 2004-08-01 10:57:13 得分 0

上面的错了。  
   
  CREATE   table   table1   (YHM   varchar(20),   WZ1   int,   WZ2   int,   WZ3   int,   XMBH   varchar(20))  
  Insert   table1   (YHM,   WZ1,   WZ2,   WZ3)   Select   YHM,   0,   0,   0   From   YH  
  Update   table1   set   XMBH   =   S.XMBH   From   ZB   S   Where   ZXR   =   BH  
  Update   table1   Set   WZ1   =   1   From   XM   S,   table1   A   Where   A.XMBH   =   S.XMBH   And   WZ   =1  
  Update   table1   Set   WZ2   =   1   From   XM   S,   table1   A   Where   A.XMBH   =   S.XMBH   And   WZ   =2  
  Update   table1   Set   WZ3   =   1   From   XM   S,   table1   A   Where   A.XMBH   =   S.XMBH   And   WZ   =3  
  Select   *   From   table1    
  Drop   table   table1Top

12 楼sankis()回复于 2004-08-01 10:59:42 得分 0

晕还有2的没看见  
  CREATE   table   table1   (YHM   varchar(20),   WZ1   int,   WZ2   int,   WZ3   int,   XMBH   varchar(20))  
  Insert   table1   (YHM,   WZ1,   WZ2,   WZ3)   Select   YHM,   0,   0,   0   From   YH  
  Update   table1   set   XMBH   =   S.XMBH   From   ZB   S   Where   ZXR   =   BH  
  Update   table1   Set   WZ1   =   WZ1+1   From   XM   S,   table1   A   Where   A.XMBH   =   S.XMBH   And   WZ   =1  
  Update   table1   Set   WZ2   =   WZ2+1   From   XM   S,   table1   A   Where   A.XMBH   =   S.XMBH   And   WZ   =2  
  Update   table1   Set   WZ3   =   WZ3+1   From   XM   S,   table1   A   Where   A.XMBH   =   S.XMBH   And   WZ   =3  
  Select   *   From   table1    
  Drop   table   table1  
  Top

13 楼hmily1688(没什么好说的)回复于 2004-08-01 11:40:55 得分 0

楼上的,有邹建回答的我一般就不答了。哈~~~Top

14 楼guxing(孤星)回复于 2004-08-01 11:43:36 得分 0

楼上的,有邹建回答的我一般就不答了。哈~~~  
  Top

15 楼zhui9(Study)回复于 2004-08-01 11:43:46 得分 0

感谢大家的帮助!  
  大侠zjcxc(邹建)   的结果能不能把  
   
  刘建奇       0       0       0  
   
  的数据也显示出来?  
   
  我吃好饭再来给分:)  
   
  谢谢  
  Top

16 楼sankis()回复于 2004-08-01 11:46:59 得分 0

hmily1688(刘胜涛--进军WAP)  
  我倒,我回答的时候没看到他已经答了,  
  我答一个题不容易啊。我没有SQL全靠印像,不可以测试   。Top

17 楼zjcxc(邹建)回复于 2004-08-01 11:47:49 得分 0

--测试  
   
  --测试数据  
  create   table   XM(XMBH   varchar(10),MC   varchar(10),WZ   int)  
  insert   XM   select   'A'         ,'B超'         ,1  
  union   all   select   'AN103','乙肝三系',2  
  union   all   select   'AN110','血常规'     ,3  
  union   all   select   'AN119','尿常规'     ,3  
  union   all   select   'AN150','血型'         ,2  
   
  create   table   ZB(XMBH   varchar(10),ZXR   varchar(10))  
  insert   ZB   select   'AN119','fw'  
  union   all   select   'AN119','sx'  
  union   all   select   'AN103','sx'  
  union   all   select   'AN103','sx'  
  union   all   select   'AN150','whw'  
   
  create   table   YH(BH   varchar(10),YHM   varchar(10))  
  insert   YH   select   'fw'   ,'方为'  
  union   all   select   'sx'   ,'沈翔'  
  union   all   select   'whw','王卫红'  
  union   all   select   'ljq','刘建奇'  
  go  
   
  --查询  
  select   a.YHM,  
  WZ1=sum(case   b.WZ   when   1   then   1   else   0   end),  
  WZ2=sum(case   b.WZ   when   2   then   1   else   0   end),  
  WZ3=sum(case   b.WZ   when   3   then   1   else   0   end)  
  from   YH   a  
  left   join   ZB   ab   on   a.BH=ab.ZXR  
  left   join   XM   b   on   b.XMBH=ab.XMBH  
  group   by   a.YHM  
  go  
   
  --删除测试  
  drop   table   xm,yh,zb  
   
  /*--测试结果  
   
  YHM                 WZ1                   WZ2                   WZ3                    
  ----------   -----------   -----------   -----------    
  方为                   0                       0                       1  
  刘建奇                 0                       0                       0  
  沈翔                   0                       2                       1  
  王卫红                 0                       1                       0  
   
  (所影响的行数为   4   行)  
  --*/  
  Top

18 楼zjcxc(邹建)回复于 2004-08-01 11:48:44 得分 0

--join   改   left   join   就行了  
   
  --动态WZ的修改方法一样  
   
  declare   @s   varchar(8000)  
  set   @s=''  
  select   @s=@s+',[WZ'+cast(WZ   as   varchar)+']=sum(case   b.WZ   when   '  
  +cast(WZ   as   varchar)+'   then   1   else   0   end)'  
  from   XM  
  group   by   WZ  
  exec('select   a.YHM'+@s+'  
  from   YH   a  
  left   join   ZB   ab   on   a.BH=ab.ZXR  
  left   join   XM   b   on   b.XMBH=ab.XMBH  
  group   by   a.YHM')  
  Top

19 楼hmily1688(没什么好说的)回复于 2004-08-01 12:41:36 得分 0

to     yesterday2000(一笑而过),   guxing(孤星)   你们俩有严重的抄袭行为,保留采取进一步措施的权利Top

相关问题

  • 综合查询(组合查询)的问题!
  • 帮帮忙:综合查询的问题
  • 不同表查询结果综合
  • 多表统计综合查询,求助!!
  • SQL查询(在线等待)
  • 两表查询,在线等。
  • 查询问题,在线等
  • 查询问题,在线等~~~~~
  • 数据查询---在线等
  • 数据库查询!在线!

关键词

  • 查询
  • 测试
  • wz
  • xmbh
  • yhm
  • zb
  • xm
  • yh
  • whw
  • zxr

得分解答快速导航

  • 帖主:zhui9
  • yesterday2000
  • sankis
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo