日期:2014-05-17  浏览次数:20533 次

菜鸟请教一个sql语句,自己写的总觉得太繁琐,望指导
三个表:部门表(DEPARTMENT),服务表(SERVICEITEM),办件表(CASEBASEINFO)
其中
部门表,部门标号:deptCode,部门名称:deptName
服务表,服务标号:Servcode,服务类型:servType,部门标号:deptCode
办件表,服务编号:servCode,
要查询的是办件表中部门编号在('aa','bb','cc'.'dd')中并且服务编号servcode是通过查询服务表中服务类型为'test','test1'对应的所有服务编号,然后列出这些办件
可能我表达的不好,先看我自己写的就明白了
select c.DEPTCODE as name,c.DEPTNAME as name2,ISNULL(AA.number1,0),ISNULL(BB.number2,0),ISNULL(CC.number3,0) from T_JC_DEPARTMENT c 
left join
(select COUNT(1) number1,c.DEPTCODE deptcode
from T_JC_CASEBASEINFO c where c.SERVCODE in ( select SERVCODE from T_JC_SERVICEITEM where SERVTYPE='test') group by c.DEPTCODE) AA
on c.DEPTCODE=AA.deptcode 
left join
(select COUNT(1) number2,c.DEPTCODE deptcode
from T_JC_CASEBASEINFO c where c.SERVCODE in ( select SERVCODE from T_JC_SERVICEITEM where SERVTYPE='test1') group by c.DEPTCODE) BB
on c.DEPTCODE=BB.deptcode 
left join
(select COUNT(1) number3,c.DEPTCODE deptcode
from T_JC_CASEBASEINFO c where c.SERVCODE in ( select SERVCODE from T_JC_SERVICEITEM where SERVTYPE='test2') group by c.DEPTCODE) CC
on c.DEPTCODE=CC.deptcode

 where c.DEPTCODE
 in('aa','bb')group by c.DEPTCODE,c.DEPTNAME,AA.number1,BB.number2,CC.number3

很繁琐吧,菜鸟一个,求好方法
------最佳解决方案--------------------
select COUNT(1) number1,c.DEPTCODE deptcode
from T_JC_CASEBASEINFO c where c.SERVCODE in ( select SERVCODE from T_JC_SERVICEITEM where SERVTYPE='test') group by c.DEPTCODE
 

改成:
select COUNT(1) number1,c.DEPTCODE deptcode
from T_JC_CASEBASEINFO c  inner join T_JC_SERVICEITEM d on c.SERVCODE =d.SERVCODE where SERVTYPE='test' group by c.DEPTCODE

------其他解决方案--------------------
select *
from CASEBASEINFO 
where servcode in (select servcode from SERVICEITEM 
where  servtype in ('test','test1') and deptcode in ('aa','bb','cc','dd'))
------其他解决方案--------------------
写得够多呀,有些可能简化下
------其他解决方案--------------------
引用:
写得够多呀,有些可能简化下
所以不知道怎么简化呀,菜鸟呀