sql >> Base de Datos >  >> RDS >> Sqlserver

SQL:no mostrar la fila cuando se cumplen dos criterios

Esto se debe a la forma NOT IN obras. Si alguno de los valores de la lista es NULL, no devolverá ningún resultado. por ejemplo

SELECT  [TestColumn] = 3
WHERE   3 NOT IN (1, 2, NULL)

No devolverá resultados, y no 3.

Si expande el ejemplo en la declaración OR equivalente, verá por qué:

WHERE   3 != 1
AND     3 != 2
AND     3 != NULL

Desde 3 != NULL Se evalúa como falso ya que nada es igual a NULL, la declaración devuelve falso.

Puede lograr el resultado requerido de 3 maneras.

1) Usa ELSE en su declaración de caso para asegurarse de que no NULL resultados

SELECT  OrderNumber, Client, Product
FROM    Orders
WHERE    Product not in(CASE WHEN client = 'client_a' and product = 'product_1' THEN Product ELSE '' END)

2) Cambiar IN a no igualar, ya que su declaración de caso solo devolverá 1 valor de todos modos

SELECT  OrderNumber, Client, Product 
FROM    Orders
WHERE   Product != (CASE WHEN client = 'client_a' and product = 'product_1' THEN Product END)

3) Revisa tu lógica, esto se puede reescribir como

SELECT  OrderNumber, Client, Product 
FROM    Orders
WHERE   NOT (Product = 'product_1' AND Client = 'Client_a')