2011-05-18 77 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