Estoy tratando de filtrar aquellos que 'no están interesados' en la primera declaración de caso, pero sigue asignando a los que 'no están interesados' el valor 1:

SELECT
U.*,
L.ID AS Lead_ID,

CASE

WHEN ((L.Age_Change < DATEADD(day,-180, GETDATE())) OR (L.Age_Change IS NULL 
AND L._Stage IS NOT NULL) AND
(L._Stage NOT LIKE '%Not Interested%' OR
L._Stage NOT LIKE '%Duplicate%') AND
(L.Start_Term NOT LIKE '%September 2019%' OR  
L.Start_Term NOT LIKE '%September 2020%' OR 
L.Start_Term NOT LIKE '%September 2021%')) THEN '1' 

WHEN (L._Stage IS NULL AND L.Created_Date < DATEADD(day,-45, GETDATE()) AND 
(L.Start_Term NOT LIKE '%September 2019%' OR 
L.Start_Term NOT LIKE '%September 2020%' OR 
L.Start_Term NOT LIKE '%September 2021%')) THEN '2'

WHEN ((L.Age_Last__Stage_Change < DATEADD(day,-180, GETDATE())) OR 
(L.Age_Last__Stage_Change IS NULL AND L._Stage IS NOT NULL) AND
(L._Stage NOT LIKE '%Not Interested%' OR
 L._Stage NOT LIKE '%Duplicate%') AND
(L.Start_Term LIKE '%September 2019%' OR 
 L.Start_Term LIKE '%September 2020%' OR 
 L.Start_Term LIKE '%September 2021%')) THEN '3'
 ELSE NULL END AS Case_Logic

 FROM
 TABLE_A AS U

He usado <> y! = Pero ambos no funcionan. Cualquier orientación sobre el tema será muy apreciada.

0
tablecloth26 16 feb. 2018 a las 22:03

2 respuestas

La mejor respuesta

(L._Stage NOT LIKE '%Not Interested%' OR L._Stage NOT LIKE '%Duplicate%')

Es probable que esto sea siempre cierto, a menos que tenga una _ etapa de 'Not Interested, Duplicate'. Cuando inviertes LIKE también tienes que invertir tu lógica AND/OR, por lo que tu lógica es la opuesta a:

(L._Stage LIKE '%Not Interested%' AND L._Stage LIKE '%Duplicate%')

Tiene el mismo problema con sus términos de inicio. O combinado con NOT coincidirá a menos que los tres términos de inicio estén en la misma columna, según el nombre de la columna espero que sea solo uno, una especie de fecha de inicio, lo que significa que coincidirá con todo.

Entonces, lo que realmente quieres es probablemente:

WHEN ((L.Age_Change < DATEADD(day,-180, GETDATE())) 
OR (L.Age_Change IS NULL 
  AND L._Stage IS NOT NULL)
AND (L._Stage NOT LIKE '%Not Interested%'
  AND L._Stage NOT LIKE '%Duplicate%')
AND (L.Start_Term NOT LIKE '%September 2019%'
  AND L.Start_Term NOT LIKE '%September 2020%' 
  AND L.Start_Term NOT LIKE '%September 2021%'))
THEN '1' 

Es probable que haya aún más problemas con el corchete, incluidos muchos paréntesis redundantes, dependiendo de dónde desee que O para que se aplique l.AgeChange, desea:

WHEN (L.Age_Change < DATEADD(day,-180, GETDATE() 
  OR L.Age_Change IS NULL) 
AND L._Stage IS NOT NULL
AND L._Stage NOT LIKE '%Not Interested%'
AND L._Stage NOT LIKE '%Duplicate%'
AND L.Start_Term NOT LIKE '%September 2019%'
AND L.Start_Term NOT LIKE '%September 2020%' 
AND L.Start_Term NOT LIKE '%September 2021%'
THEN '1'

Para exigir que el cambio de edad sea superior a 180 días o nulo y todas las demás condiciones aún importan o:

WHEN (L.Age_Change < DATEADD(day,-180, GETDATE()) 
OR (L.Age_Change IS NULL 
  AND L._Stage IS NOT NULL
  AND L._Stage NOT LIKE '%Not Interested%'
  AND L._Stage NOT LIKE '%Duplicate%'
  AND L.Start_Term NOT LIKE '%September 2019%'
  AND L.Start_Term NOT LIKE '%September 2020%' 
  AND L.Start_Term NOT LIKE '%September 2021%')
THEN '1' 

Si el cambio de edad es> 180 días siempre 1, de lo contrario si el cambio de edad es nulo, marque las otras condiciones

1
Andrew 16 feb. 2018 a las 20:04

'No interesado' siempre coincidirá con su primer caso, ya que coincide con L._Stage NOT LIKE '%Duplicate%' y usted utilizó OR. Intente cambiarlo a L._Stage NOT LIKE '%Not Interested%' AND L._Stage NOT LIKE '%Duplicate%'

1
twinklehawk 16 feb. 2018 a las 19:12