when w3schools switch stored hacer example ejemplos cómo tsql case case-when

tsql - w3schools - sql case example



SQL-DECLARACIÓN DE CASO-sentencia WHEN Y sentencia (3)

Tengo un problema al tratar de encontrar la mejor solución para el siguiente problema.

Tengo una mesa de compra que tiene una columna de estado, por la cual 1 se autoriza, 2 se completa y hay otras también.

También tengo una tabla de minorista, que tiene una columna RetailerProcessType, donde 1 es un paso y 2 es dos.

Tengo la consulta a continuación:

CASE purc.State WHEN 1 THEN ''"AUTHORISED"'' WHEN 2 THEN ''"AUTHORISED"'' WHEN 4 THEN ''"AUTHORISED"'' ELSE ''"DECLINED"'' END AS Autorised_Decline_Status,

Pero lo que necesito hacer es lo siguiente:

WHEN STATE = 2 AND RetailerProcessType = 1 THEN ''"AUTHORISED"'' WHEN STATE = 1 AND RetailerProcessType = 2 THEN ''"PENDING"'' WHEN STATE = 2 AND RetailerProcessType = 2 THEN ''"AUTHORISED"'' ELSE ''"DECLINED"''

La única forma en que puedo pensar en hacer esto es tener una declaración de IF masiva alrededor de la consulta, una para un minorista de un paso y otra para un paso de dos, ya que mi comprensión es una cláusula WHEN que no puede contener un "AND".

Sin embargo, esto parece demasiado largo aliento; ¿Alguien tiene alguna idea más ordenada?


Podrías hacerlo de esta manera:

-- Notice how STATE got moved inside the condition: CASE WHEN STATE = 2 AND RetailerProcessType IN (1, 2) THEN ''"AUTHORISED"'' WHEN STATE = 1 AND RetailerProcessType = 2 THEN ''"PENDING"'' ELSE ''"DECLINED"'' END

La razón por la que puede hacer un AND aquí es porque no está marcando CASOS de ESTADO, sino que está cumpliendo las Condiciones de CASING.

La parte clave aquí es que la condición ESTADO es una parte del CUANDO.


Solo cambia tu sintaxis ligeramente

CASE WHEN STATE = 2 AND RetailerProcessType = 1 THEN ''"AUTHORISED"'' WHEN STATE = 1 AND RetailerProcessType = 2 THEN ''"PENDING"'' WHEN STATE = 2 AND RetailerProcessType = 2 THEN ''"AUTHORISED"'' ELSE ''"DECLINED"'' END

Si no coloca la expresión de campo antes de la sentencia CASE , puede colocar prácticamente cualquier campo y comparación allí que desee. Es un método más flexible pero tiene una sintaxis ligeramente más detallada.


SELECT Get_Log.IDNo, Get_Log.StudentName, Get_Log.[Sign-in Date], Get_Log.DurationOfSum, Get_Log.Day, CASE WHEN DurationOfSum > 5 THEN ''"present"'' ELSE ''"absent"'' END AS Attendance FROM Get_Log;