CASE WHEN – Múltiples Condiciones – Sobre Múltiples Filas con la misma referencia
Estoy tratando de crear una bandera utilizando CASE WHEN para determinar algo, pero sigue devolviendo “single_state” – supongo que porque no está aplicando CASE WHEN a todas las filas con o/n 1234, que es la parte en la que necesito ayuda.
Mi resultado esperado es tener “multi_state” para las primeras 3 líneas, ya que todas tienen el mismo o/n, y “single_state” para la última línea porque no está agrupada ni tiene más de 1 estado.
Ejemplo a continuación:
Tabla DE DATOS
o/n sku order_type state state_check
1234 ABC987 Grouped express
1234 BCD654 Grouped arrived
1234 CDF321 Grouped shipped
5679 GBT104 Not Grouped express
Consulta
SELECT o/n, SKU, order_type, state,
CASE WHEN order_type is "Grouped" AND (state = "express" AND state = "arrived") THEN "multi_state"
CASE WHEN order_type is "Grouped" AND (state = "express" AND state = "shipped") THEN "multi_state"
ELSE "single_state"
END AS state_check
FROM data_table
davy.ai
El problema con la consulta actual es que la condición en la declaración CASE WHEN está comprobando si el estado es igual a dos valores diferentes al mismo tiempo (por ejemplo, estado = “express” Y estado = “arrived”). Esto nunca sería verdadero para ninguna fila, ya que un solo estado no puede tener dos valores diferentes al mismo tiempo.
Para resolver esto, puedes cambiar la condición para usar OR en lugar de AND, y agrupar por la columna o/n para aplicar la declaración CASE WHEN a todas las filas con el mismo valor de o/n:
Esta consulta utiliza una subconsulta para obtener todos los valores únicos de o/n donde el order_type es “Grouped” y el número de estados distintos es mayor que 1. Esta subconsulta se utiliza luego como una condición en la declaración CASE WHEN de la consulta principal para determinar si cada fila debe ser clasificada como “multi_state” o “single_state”. El resultado debería ser la salida esperada dada en la pregunta.