2013-05-13 7 views
8

私はMySQLクエリをT-SQLクエリに変換しようとしていますが、SUMステートメントで囲まれたIFステートメントが私を引き上げています。助言がありますか?T-SQL IF文が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] 

しかし、私はエラーを取得する:

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

答えて

16

T-SQLは、 "インライン" IF声明持っていません - 代わりに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] 

をそう価値場合をCMTS_RQ.US_Pwrの場合は>= 37 AND <= 49となります。SUMに1を加えます。そうでない場合は0となります。探しているものはありますか? SQL Serverの以降で

、新しいIIF functionを使用することができます。

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

1例を使用します。 – Kermit

+1

洞察のおかげで、それは正しい方向に私を指します。 – user937036

関連する問題