2013-05-13 54 views
8

Tôi đang cố chuyển đổi truy vấn MySQL thành truy vấn T-SQL và câu lệnh IF được đính kèm trong câu lệnh SUM đang vấp ngã tôi. Bất kỳ đề xuất?Câu lệnh T-SQL IF được nhúng trong hàm 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] 

Nhưng tôi nhận được một lỗi:

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

Trả lời

16

T-SQL không có một "inline" IF tuyên bố - sử dụng một CASE thay vì:

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] 

Vì vậy, nếu giá trị của CMTS_RQ.US_Pwr>= 37 AND <= 49 sau đó thêm 1 vào SUM - nếu không 0. Điều đó có cung cấp cho bạn những gì bạn đang tìm kiếm không?

Trong SQL Server 2012 và mới hơn, bạn có thể sử dụng mới IIF function:

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

+1 cho việc sử dụng một ví dụ. – Kermit

+1

Cảm ơn sự thấu hiểu, điều đó chỉ cho tôi đi đúng hướng. – user937036

Các vấn đề liên quan