2016-08-25 9 views
0

SQL ServerのWhere節でcaseまたはifを使用するには?あなたはそれをやろうとしているようにしwhere句でifcaseステートメントを使用することはできませんSQL Serverのwhere節のcaseまたはifを使用する方法

DECLARE 
@Sta  int 
Set @Sta = 1 

SELECT TOP 1000 
     [No] 
     ,[Material] 
     ,[Material Description] 
     ,[Procurement Type] 

    FROM [PMLite].[dbo].[zSTO:8/22/2016] 
    WHERE IF @Sta = 1 
     [Procurement Type] IN ('F','E') 
     ELSE @Sta = 2 
     [Procurement Type]= 'F' 

誰もがこのような場合のために助けることができます。..

+0

あなたのWHERE句のgic。あなたはそれが割り当てをすることを期待していますか? –

+0

パラメータ値が1の場合はFまたはEを含むディスプレイ – Bagong

+0

ただし、パラメータ値が2の場合は、表示のみF – Bagong

答えて

1

しかし、あなたの条件は次のように論理演算子を使って書き換えることができるので、実際には、あなたはこれらのステートメントは必要ありません。

WHERE (@Sta = 1 and [Procurement Type] IN ('F','E')) 
     or (@Sta = 2 and [Procurement Type]= 'F') 
+0

OPがやろうとしていることは不可能であることは注目に値する。 'if'と' case'文*はそのように使用できません。 *あなたの場合、あなたのケースでは、 'if'や' case'ステートメントを使う必要はありません。* *、実際に可能だったように聞こえます。 – Siyual

+0

where句にcase式を入れることは可能ですが、一般的には悪い考えです。 – jarlh

+0

@jarlh where句にcaseステートメントを入れることは可能です。しかし、OPが試みたときにどの 'where 'ステートメントが使用されているかを論理的に制御することはできません。 – Siyual

0

作品以上OR文は、別の方法は、動的SQLを使用することです

DECLARE 
@Sta  int 
Set @Sta = 1; 


DECLARE @sqlstring NVARCHAR(MAX) = N' 
SELECT TOP 1000 
     [No] 
     ,[Material] 
     ,[Material Description] 
     ,[Procurement Type] 

    FROM [PMLite].[dbo].[zSTO:8/22/2016]'; 

IF @Sta = 1 
    SET @sqlstring = @sqlstring + N'WHERE [Procurement Type] IN (''F'',''E'')' 
ELSE 
    SET @sqlstring = @sqlstring + N'WHERE [Procurement Type]= ''F'''; 

EXEC sp_executesql @sqlstring; 
+0

良い代替ソリューション、 – Bagong

0

同じことを行う別の方法:

WHERE [Procurement Type] = (CASE WHEN @Sta = 1 THEN 'E' END) 
    OR [Procurement Type] = (CASE WHEN @Sta = 1 OR @Sta = 2 THEN 'F' END) 
+0

ありがとう@ Pinwar13しかし、最初の答えはまだシンプルです – Bagong

+0

動作しません:彼は@Sta = 1のFとEが必要です – TJB

+0

@ Sta = 1 – p2k

関連する問題