关于综合查询的问题,望高手解决。。。。。。。在线等。。。。。
小弟有个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




