2013-05-13 17 views
8

Sto tentando di convertire una query MySQL in una query T-SQL e l'istruzione IF racchiusa all'interno di un'istruzione SUM mi fa inciampare. Eventuali suggerimenti?Istruzione IF T-SQL incorporata in una funzione sum()

SELECT 
    CMTS_RQ.[Dated], 
    CMTS_RQ.CMTS_Name, 
    Count(CMTS_RQ.CMTS_Name) AS emat_count, 
    Sum(if(CMTS_RQ.US_Pwr>=37 and CMTS_RQ.US_Pwr<=49)) AS us_pwr_good 
FROM 
    CMTS_RQ 
GROUP BY 
    CMTS_RQ.CMTS_Name, 
    CMTS_RQ.[Dated] 

ma ottengo un errore:

Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'if'.
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ')'.

risposta

16

T-SQL non hai "in linea" IF economico - usare un CASE invece:

SELECT 
    CMTS_RQ.[Dated], 
    CMTS_RQ.CMTS_Name, 
    Count(CMTS_RQ.CMTS_Name) AS emat_count, 
    Sum(CASE 
      WHEN CMTS_RQ.US_Pwr >=37 AND CMTS_RQ.US_Pwr <= 49 
      THEN 1 
      ELSE 0 
     END) AS us_pwr_good 
FROM 
    CMTS_RQ 
GROUP BY 
    CMTS_RQ.CMTS_Name, 
    CMTS_RQ.[Dated] 

Quindi, se il valore di CMTS_RQ.US_Pwr è >= 37 AND <= 49 quindi aggiungi 1 allo SUM - altrimenti 0. Ti dà quello che stai cercando?

In SQL Server 2012 e più recente, è possibile utilizzare la nuova IIF function:

SUM(IIF(CMTS_RQ.US_Pwr >= 37 AND CMTS_RQ.US_Pwr <= 49, 1, 0)) AS us_pwr_good 
+1

+1 per l'utilizzo di un esempio. – Kermit

+1

Grazie per l'intuizione, che mi indica la giusta direzione. – user937036