2017-07-21 9 views
0

CASE文を使用して、列の特定のフィールドに対応するすべての値に適用するにはどうすればよいですか?SQL CASE文を正しく使用する方法

たとえば、各列のすべての支払いを除外として表示する必要がありますが、これは最初の列にのみ適用されます。また、すべてのコラムのすべての支払いに適用したいと思います。

CASE WHEN ardoc.DocType = 'PA' 
     THEN arDoc.DocBal*(-1) ELSE ardoc.DocBal 
END AS [Document Balance] 

注:「PA」はあなたが複数の列を返します単一CASE式を記述することはできません支払い

答えて

1

あなたはタブAllermanあなたは、単一のCASE文でこれを行うことはできませんが、別のアプローチがあるかもしれない、と述べたよう

SELECT DocBal = multiplier * DocBal, 
     Col2 = multiplier * Col2, 
     Col3 = multiplier * Col3 
FROM arDoc 
     CROSS APPLY (VALUES(IIF(DocType = 'PA', -1, 1))) V(multiplier); 
+0

Martinさん、ありがとうございました。 – JoAnne

2

の略です。列ごとに別々のCASEを記述する必要があります。

0

ようなもので、この場合の表現の繰り返しを避けることができます。

DocTypeと乗数を含むテーブル(一時的または永続的)を作成し、これに結合します。

DECLARE @t TABLE(DocType varchar(2), multiplier int) 
INSERT INTO @t VALUES 
('PA', -1), 
('XX', 1), 
('YY', 1) 

ような何かその後は、クエリは、私は左をやった

SELECT 
    arDoc.DocBal * ISNULL(t.Multiplier, 1) as [Document Balance], 
    myNextColumn * ISNULL(t.Multiplier, 1) as [My Next Output Column] 
From MyTable a 
    LEFT JOIN @t t on a.DocType = t.DocType 

ようになりエントリが@tに見つからない場合は、ここでの参加となるようにISNULLを使用し、それ

さらにコードを小さくする必要があります。新しい乗算器が必要な場合は、case文を変更する必要はありません。

関連する問題