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 に答える