2011-05-18 108 views
26

在SQL Server 2005中我试图查询这个select语句SQL Server的CASE。当。在声明

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 

它返回下面

错误消息156,15级,状态1,第4行 关键字“IN”附近的语法不正确。

请给我一些关于我的代码可能出错的建议。

回答

4

尝试......

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 

只是删除突出串

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

+0

我的fixit如CASE WHEN的DeviceID IN(“7”,“10”的发言,'62','58','60','46','48','50','137','139','141','145','164')THEN'01' 当DeviceID IN('8','9','63','59','61','47','49','51','138','140','142','146 ','165')THEN'02'ELSE'NA'END as clocking, – Faisal 2011-05-18 12:00:27

2

使用“简单案例”进行长时间书写时可能会更容易阅读,例如

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 

...哪种让我说,也许你可以受益于一个查找表可以JOIN完全消除CASE表达这件事。

+0

upvote for lookup table suggestion – 2016-06-01 15:59:17

9

感谢您的回答 我已经修改看起来像下面

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