Caso do servidor SQL. QUANDO. Em declaração

no servidor sql 2005, estou a tentar consultar esta instrução select

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 

devolve o erro abaixo

Msg 156, nível 15, Estado 1, Linha 4 sintaxe incorrecta perto do palavra-chave "IN".

Por favor, dê-me alguns conselhos sobre o que pode estar errado com o meu código.

Author: Martin Smith, 2011-05-18

4 answers

CASE AlarmEventTransactions.DeviceID deve ser ...

Está a misturar as 2 formas da expressãoCASE .

 34
Author: Martin Smith, 2015-05-31 14:28:42
Obrigado pela resposta. Eu modifiquei as declarações para parecer abaixo
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
 10
Author: Faisal, 2011-05-18 18:06:20
Experimenta isto...
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

Apenas remover o texto seleccionado

Seleccionar Uma transmissãorelativaalarmenteável.TxnID, Processo transacções alarmantes.DeviceID Quando o DeviceID entrar('7', '10', '62', '58', '60', ...)

 4
Author: Vinay Kumar, 2016-11-22 21:38:48

Pode ser mais fácil de ler quando escrito à mão usando o 'caso simples', por exemplo

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

...o que me faz pensar que talvez possa beneficiar de uma mesa de consulta para a qual possa eliminar completamente a expressão.

 2
Author: onedaywhen, 2011-05-18 11:06:52