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.
CASE AlarmEventTransactions.DeviceID
debería ser CASE
.
Estás mezclando las 2 formas de la expresión CASE
.