我该如何摆脱这些子选择?

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)

Die*_*ego 6

你走在正确的轨道上.您应该能够使用SUM而不是COUNTGROUP 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的那些单引号...