Hoe gegevens van CASE te filteren WANNEER statement using where condition?

Na bondgenoten CASE WANNEER conditie als kolom kunnen we die kolom filteren?

Voorbeeld;

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'

Ik noemde CASE WHEN conditie als 'Operation' en nu wil ik alleen de bewerking 'X' in de kolom Operation zien.

Is er een manier om de CASE WHEN-voorwaarde te filteren met where-component in SSMS 2012?

0
ja ru de
Waarom niet gewoon direct WAAR nummer LIKE '20% '? en omdat je de resultaatset filtert die je niet nodig hebt voor CASE expressie, alleen 'X' ALS bewerking
toegevoegd de auteur Sami, de bron
Ik heb zelfs meerdere CASE WHEN-statements, maar ja, het gebruik van Number als filtervoorwaarde werkt ook en eenvoudig. Bedankt @ Sami
toegevoegd de auteur Sam, de bron

4 antwoord

U kunt AANVRAGEN gebruiken:

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';

Dit zou handig zijn als je ook andere filters hebt. Echter alleen WHERE Number LIKE '20% ' is prima.

2
toegevoegd

Wikkel je query op als een afgeleide tabel , dan kun je de nieuwe kolom in de WHERE -clausule plaatsen:

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
toegevoegd
Eenvoudig Bewerking = 'X'
toegevoegd de auteur Sami, de bron

U moet de expressie CASE in de WHERE-component herhalen of deze in een andere SELECT-instructie nestelen.

0
toegevoegd

Met de voorwaarde die u wilt toepassen, is uw verklaring gelijk aan:

SELECT 'X' AS Operation, *
FROM 
TableA
where Number like '20%'
0
toegevoegd