2017-11-24 15 views
1

次のコードを使用してSQL Server 2014のWhere句に複数の条件を追加しようとしていますが、構文エラーが発生します。where句でIIFステートメントを使用する

私はcase文を試しましたが、このサイトの例に基づいて動作させることはできません。

Where 
iif(ss.DATAAREAID = 'USMF', 
(ss.ITEMGROUPID like 'S%' and ss.ITEMGROUPID not like 'SMS%'), 
(ss.ITEMGROUPID like 'SW%' and ss.ITEMGROUPID like 'SS%') 

私はそれが迅速な解決策であると確信していますが、どんな助けにも感謝します。

+0

@LasseVågsætherKarlsen - https://docs.microsoft.com/en-us/sql/t-sql/functions/logical-functions-iif-transact-sql –

+0

SQL Serverの知識を明らかに更新する必要はありません。 –

答えて

5

条件付きロジックを使用しないでください。ただ、ブール式を使用します。

Where (ss.DATAAREAID = 'USMF', and ss.ITEMGROUPID like 'S%' and ss.ITEMGROUPID not like 'SMS%') or 
     (ss.DATAAREAID <> 'USMF' and ss.ITEMGROUPID like 'SW%' and ss.ITEMGROUPID like 'SS%') 

注:iif()は、SQL Serverの機能ですが、それはMS Accessに後方互換性のために導入されました。 ANSI標準のcase式を代わりに使用する必要があります。

SQL Serverがブール式の結果を有効な値として扱わないため、バージョンが機能しません。あなたはこのような何かをする必要があります:

where (case when . . . and . . . then 1 
      else 0 
     end) = 1 

上記口座にNULLの値を取ることはありません。この条件は、必要に応じて簡単に追加できます。

+0

ありがとうございました。私のポストに返信したすべての人にありがとう – Juni0R

関連する問題