when w3schools switch stored hacer example ejemplos cómo sql sql-server sql-server-2005 case-when

w3schools - SQL Server CASE.. CUANDO.. instrucción IN



sql case example (4)

En el servidor SQL 2005 estoy intentando consultar esta declaración de selección

SELECT AlarmEventTransactionTableTable.TxnID, CASE AlarmEventTransactions.DeviceID WHEN DeviceID IN( ''7'', ''10'', ''62'', ''58'', ''60'', ''46'', ''48'', ''50'', ''137'', ''139'', ''142'', ''143'', ''164'' ) THEN ''01'' WHEN DeviceID IN( ''8'', ''9'', ''63'', ''59'', ''61'', ''47'', ''49'', ''51'', ''138'', ''140'', ''141'', ''144'', ''165'' ) THEN ''02'' ELSE ''NA'' END AS clocking, AlarmEventTransactionTable.DateTimeOfTxn FROM multiMAXTxn.dbo.AlarmEventTransactionTable

Devuelve el error de abajo.

Msg 156, nivel 15, estado 1, línea 4 Sintaxis incorrecta cerca de la palabra clave ''IN''.

Por favor, dame algunos consejos sobre lo que podría estar mal con mi código.


Gracias por la respuesta. He modificado las declaraciones para que se vean a continuación.

SELECT AlarmEventTransactionTable.TxnID, CASE WHEN DeviceID IN(''7'', ''10'', ''62'', ''58'', ''60'', ''46'', ''48'', ''50'', ''137'', ''139'', ''141'', ''145'', ''164'') THEN ''01'' WHEN DeviceID IN(''8'', ''9'', ''63'', ''59'', ''61'', ''47'', ''49'', ''51'', ''138'', ''140'', ''142'', ''146'', ''165'') THEN ''02'' ELSE ''NA'' END AS clocking, AlarmEventTransactionTable.DateTimeOfTxn FROM multiMAXTxn.dbo.AlarmEventTransactionTable


Prueba esto...

SELECT AlarmEventTransactionTableTable.TxnID, CASE WHEN DeviceID IN(''7'', ''10'', ''62'', ''58'', ''60'', ''46'', ''48'', ''50'', ''137'', ''139'', ''142'', ''143'', ''164'') THEN ''01'' WHEN DeviceID IN(''8'', ''9'', ''63'', ''59'', ''61'', ''47'', ''49'', ''51'', ''138'', ''140'', ''141'', ''144'', ''165'') THEN ''02'' ELSE ''NA'' END AS clocking, AlarmEventTransactionTable.DateTimeOfTxn FROM multiMAXTxn.dbo.AlarmEventTransactionTable

Solo remueve la cadena resaltada

SELECT AlarmEventTransactionTableTable.TxnID, CASE AlarmEventTransactions.DeviceID WHEN DeviceID IN (''7'', ''10'', ''62'', ''58'', ''60'', ...)


Puede ser más fácil de leer cuando se escribe a mano usando el "caso simple", por ejemplo

CASE DeviceID WHEN ''7 '' THEN ''01'' WHEN ''10 '' THEN ''01'' WHEN ''62 '' THEN ''01'' WHEN ''58 '' THEN ''01'' WHEN ''60 '' THEN ''01'' WHEN ''46 '' THEN ''01'' WHEN ''48 '' THEN ''01'' WHEN ''50 '' THEN ''01'' WHEN ''137'' THEN ''01'' WHEN ''139'' THEN ''01'' WHEN ''142'' THEN ''01'' WHEN ''143'' THEN ''01'' WHEN ''164'' THEN ''01'' WHEN ''8 '' THEN ''02'' WHEN ''9 '' THEN ''02'' WHEN ''63 '' THEN ''02'' WHEN ''59 '' THEN ''02'' WHEN ''61 '' THEN ''02'' WHEN ''47 '' THEN ''02'' WHEN ''49 '' THEN ''02'' WHEN ''51 '' THEN ''02'' WHEN ''138'' THEN ''02'' WHEN ''140'' THEN ''02'' WHEN ''141'' THEN ''02'' WHEN ''144'' THEN ''02'' WHEN ''165'' THEN ''02'' ELSE ''NA'' END AS clocking

... qué tipo de cosa me hace pensar que quizás podría beneficiarse de una tabla de búsqueda a la que puede JOIN para eliminar la expresión CASE completo.