Ton*_*ans 3 sql sql-server-2005
我有这个问题:
select distinct pdi.height, pdi.width, pj.jobnum
, (select count(barcode) from productiondoorinformation
inner join view_productionjobs on view_productionjobs.ctr=productiondoorinformation.productionjobsctr
where view_productionjobs.jobnum=pj.jobnum
and productiondoorinformation.height=pdi.height
and productiondoorinformation.width=pdi.width
and productiondoorinformation.alternaterating='PARTICLE') as particleqty
, (select count(barcode) from productiondoorinformation
inner join view_productionjobs on view_productionjobs.ctr=productiondoorinformation.productionjobsctr
where view_productionjobs.jobnum=pj.jobnum
and productiondoorinformation.height=pdi.height
and productiondoorinformation.width=pdi.width
and productiondoorinformation.alternaterating<>'PARTICLE') as laminatedqty
from productiondoorinformation pdi inner join view_productionjobs pj on pj.ctr=pdi.productionjobsctr
where pj.jobnum='' + @Jobnum + ''
Run Code Online (Sandbox Code Playgroud)
必须有更好的方法来成为更好的方法.我讨厌这些子选项,但是如果没有它们,我就不会吝啬重写它.当您看到每个子选项的where子句时,您会注意到子选择有两个不同的数量.
此查询需要9秒钟才能执行.那太久了.我针对这些表编写的任何其他查询都会立即返回.有什么建议?我尝试过group by等,但只能让它以某种方式工作(粒子或<>粒子),但不能同时工作.
返回的数据应如下所示:
height | width | jobnum | particleqty | laminatedqty
79 49 t1000 10 5
78 49 t1000 1 3
79 47 t1000 15 0
Run Code Online (Sandbox Code Playgroud)
你走在正确的轨道上.您应该能够使用SUM而不是COUNT和GROUP BY:
select pdi.height, pdi.width, pj.jobnum,
SUM(CASE pdi.alternaterating WHEN 'PARTICLE' THEN 1 ELSE 0 END) particleqty,
SUM(CASE pdi.alternaterating WHEN 'PARTICLE' THEN 0 ELSE 1 END) laminatedqty
from productiondoorinformation pdi
inner join view_productionjobs pj on pj.ctr=pdi.productionjobsctr
where pj.jobnum='' + @Jobnum + ''
group by pdi.height, pdi.width, pj.jobnum
Run Code Online (Sandbox Code Playgroud)
BTW,不确定你需要''围绕@Jobnum的那些单引号...
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |