0

興味深い問題があります。スカラー値関数を記述します。パラメータの1つがテーブル列にありません。where句でこのパラメーター(@ImpUrgPri)を使用する必要があります。そのパラメータについては、テーブルに列が存在する条件があります。それについて私を助けてくれませんか?

DECLARE @ImpUrgPri NVARCHAR(3)
SET @ImpUrgPri = 'URG'
DECLARE @Enum INT
SET @Enum = 0

select COUNT(*) 
from zODYA_vwCallReq_AllData 
where ActiveFlag = 1
AND 
(CASE WHEN (@ImpUrgPri = 'PRI') THEN Priority_Enum == @Enum
        WHEN (@ImpUrgPri = 'URG') THEN Urgency_Enum == @Enum 
        WHEN (@ImpUrgPri = 'IMP') THEN Impact_Enum == @Enum END)

group by 
(CASE WHEN (@ImpUrgPri = 'PRI') THEN Priority_Enum 
        WHEN (@ImpUrgPri = 'URG') THEN Urgency_Enum 
        WHEN (@ImpUrgPri = 'IMP') THEN Impact_Enum END)
4

3 に答える 3

2

あなたの選択は次のようになります:

select COUNT(*) 
from zODYA_vwCallReq_AllData 
where ActiveFlag = 1
AND @Enum =  (CASE WHEN (@ImpUrgPri = 'PRI') THEN Priority_Enum
             WHEN (@ImpUrgPri = 'URG') THEN Urgency_Enum
             WHEN (@ImpUrgPri = 'IMP') THEN Impact_Enum END)

group by 
(CASE WHEN (@ImpUrgPri = 'PRI') THEN Priority_Enum 
        WHEN (@ImpUrgPri = 'URG') THEN Urgency_Enum 
        WHEN (@ImpUrgPri = 'IMP') THEN Impact_Enum END)
于 2012-11-19T13:06:38.640 に答える
0

「いつ」の場合に1つずつ、IF合計3つの異なるを使用するのが最善だと思います。SELECT

SQLを動的に(ストアドプロシージャ内で)作成することもできます。これにより、ストアドプロシージャがわずかに短くなります。ここでは3つのオプションだけで、3つのSELECTを使用します。

于 2012-11-19T13:02:27.980 に答える
0
DECLARE @ImpUrgPri NVARCHAR(3)
SET @ImpUrgPri = 'URG'
DECLARE @Enum INT
SET @Enum = 0

select COUNT(*) 
from zODYA_vwCallReq_AllData 
where ActiveFlag = 1
AND 
(CASE @ImpUrgPri
    WHEN 'PRI' THEN Priority_Enum
    WHEN 'URG' THEN Urgency_Enum
    WHEN 'IMP' THEN Impact_Enum
END) = @Enum
group by 
(CASE @ImpUrgPri
    WHEN 'PRI' THEN Priority_Enum
    WHEN 'URG' THEN Urgency_Enum
    WHEN 'IMP' THEN Impact_Enum
END)
于 2012-11-19T13:08:09.733 に答える