where条件を使用してCASE WHENステートメントのデータをフィルタリングする方法

列としての条件が一致すると、その列をフィルタできますか。

SELECT 
    CASE WHEN Number like '20%' THEN 'X'
   WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
   END Operation
   ,*
FROM 
TableA
where Operation like 'X'

CASE WHEN conditionを 'Operation'として呼び出し、今度はOperation列にOperation 'X'だけを表示したいと思います。

SSMS 2012のwhere句でCASE WHEN条件をフィルタリングする方法はありますか?

0
nl ru de
直接 WHERE Numberのような'20% 'ではないのはなぜですか。また、結果セットをフィルタするので、 CASE 式は不要です。単に 'X' AS Operation
追加された 著者 Sami,
私は実際には複数のCASE WHEN文を持っていますが、フィルタ条件としてNumberを使ってもうまくいき簡単です。ありがとう@Sami
追加された 著者 Sam,

4 答え

APPLY を使用できます。

SELECT A.*, AA.*
FROM TableA AS A CROSS APPLY
     ( VALUES (CASE WHEN Number like '20%'  
                    THEN 'X'
                    WHEN (Number like '15%' OR [Item Number] like '16%')  
                    THEN 'Y' ELSE 'Z'
               END ) 
     ) AA(Operation)
WHERE AA.Operation = 'X';

他のフィルタもある場合、これは役に立ちます。ただし、 WHERE Number LIKE '20% 'だけが問題ありません。

2
追加された

クエリを派生テーブルとしてラップすると、新しい列を WHERE 句に追加できます。

select * 
from
(
    SELECT 
        CASE WHEN Number like '20%' THEN 'X'
       WHEN Number like '15%' or [Item Number] like '16%'  THEN 'Y' ELSE 'Z'
       END Operation
       ,*
    FROM 
    TableA
) dt
where Operation like 'X'
2
追加された
単に Operation = 'X'
追加された 著者 Sami,

WHERE句で CASE 式を繰り返すか、またはこれを別のSELECT文の中にネストする必要があります。

0
追加された

適用したいという条件では、ステートメントは次のものと同等です。

SELECT 'X' AS Operation, *
FROM 
TableA
where Number like '20%'
0
追加された