0

查询 #1

SELECT 
    @IN_EMPCOUNT = COUNT (a.CH_EMPCODE) 
FROM 
    BSC_REVIEW_EMP_MASTER a
INNER JOIN 
    dbo.cmn_authorization b ON (CASE b.vc_bu WHEN '%' THEN a.BUSSCD ELSE b.vc_bu END) =  a.BUSSCD           
WHERE 
    IN_REVIEW_NO = @in_review_no
    AND b.ch_empcode = @ch_empcode  
    AND b.in_rolecode IN (136, 137, 138)

查询 #2

SELECT 
    @IN_EMPCOUNT1 = COUNT (a.CH_EMPCODE) 
FROM 
    BSC_REVIEW_EMP_MASTER a
INNER JOIN 
    dbo.cmn_authorization b ON (CASE b.vc_bu WHEN '%' THEN a.BUSSCD ELSE b.vc_bu END) =  a.BUSSCD           
WHERE 
    IN_REVIEW_NO = @in_review_no
    AND b.ch_empcode = @ch_empcode  
    AND b.in_rolecode IN (138, 139, 140)

查询 #3

SELECT 
    @IN_EMPCOUNT2 = COUNT (a.CH_EMPCODE) 
FROM 
    BSC_REVIEW_EMP_MASTER a
INNER JOIN 
    dbo.cmn_authorization b ON (CASE b.vc_bu WHEN '%' THEN a.BUSSCD ELSE b.vc_bu END) =  a.BUSSCD           
WHERE 
    IN_REVIEW_NO = @in_review_no
    AND b.ch_empcode = @ch_empcode  
    AND b.in_rolecode IN (141, 142, 145)

结果:

Select @in_empcount, @in_empcount1, @in_empcount2

这是我正在处理的示例查询。我可以做一些事情,比如不必为每个 where 子句重复相同的 select 语句,for (b.in_rolecode)结果是一样的吗?

4

1 回答 1

0

这是您要问的 - 包括您的IN子句中的所有这些值:

select name 
from tabl1 
where id in ( 1,2,3,4,8,9 )

IN 子句就像 OR 子句一样工作,因此无需分隔这些查询。

编辑——根据您的最新编辑,您希望使用 CASE 和 COUNT(您也可以使用 SUM,但它的工作方式相同):

SELECT 
    COUNT (CASE WHEN b.in_rolecode IN (136,137,138) THEN 1 END) in_empcount,
    COUNT (CASE WHEN b.in_rolecode IN (138,139,140) THEN 1 END) in_empcount1,
    COUNT (CASE WHEN b.in_rolecode IN (141,142,145) THEN 1 END) in_empcount2
FROM BSC_REVIEW_EMP_MASTER a
    INNER JOIN dbo.cmn_authorization b
         ON (CASE b.vc_bu WHEN '%' THEN a.BUSSCD ELSE b.vc_bu END) =  a.BUSSCD           
WHERE IN_REVIEW_NO = @in_review_no
    AND b.ch_empcode =@ch_empcode  
于 2013-04-05T03:55:27.550 回答