2011-05-18 3 views
26

Sur le serveur SQL 2005, je suis en train d'interroger cette instruction selectSQL Server CASE .. QUAND .. Dans la déclaration

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 

Il renvoie l'erreur ci-dessous

Msg 156, Niveau 15, État 1, Line 4 Syntaxe incorrecte près du mot clé 'IN'.

S'il vous plaît donnez-moi quelques conseils sur ce qui pourrait être mauvais avec mon code.

Répondre

4

Try this ...

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 

Il suffit de supprimer la chaîne en surbrillance

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

+0

Je Fixit comme CAS QUAND DeviceID IN (« 7 », « 10 » », 62, 58, 60, 46, 48, 50, 137, 139, 141, 145, 164). WHEN DeviceID IN ('8', '9', '63', '59', '61', '47', '49', '51', '138', '140', '142', '146 ',' 165 ') THEN' 02 'ELSE' NA 'END AS horloge, – Faisal

2

Il pourrait être plus facile à lire lorsqu'il est écrit à la main en utilisant le «cas simple» par exemple

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 

... quel type me fait chose que vous pourriez peut-être bénéficier d'une table de consultation à laquelle vous pouvez JOIN pour éliminer la toute expression CASE.

+0

upvote pour la suggestion de table de recherche –

9

Merci pour la réponse j'ai modifié les déclarations de ressembler ci-dessous

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