2013-05-13 16 views
8

Próbuję przekonwertować zapytanie MySQL na zapytanie T-SQL, a instrukcja IF, która jest zawarta w instrukcji SUM, wyzwala mnie. Jakieś sugestie?Instrukcja T-SQL IF osadzona w funkcji 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] 

ale pojawia się błąd:

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 ')'.

Odpowiedz

16

T-SQL nie mają "inline" IF oświadczenie - zamiast używać CASE:

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] 

Więc jeśli wartość z CMTS_RQ.US_Pwr jest >= 37 AND <= 49 następnie dodać 1 do SUM - w przeciwnym razie 0. Czy to daje ci to, czego szukasz?

W SQL Server i nowszej, można użyć nowego IIF function:

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

+1 za korzystanie przykład. – Kermit

+1

Dzięki za wgląd, który wskazuje na mnie we właściwym kierunku. – user937036

Powiązane problemy