2015-11-04 32 views
0

我有下面的select语句。如何在SQL Select语句中使用If else

WITH cte AS 
(
    SELECT MAX(logDate) AS Daily 
    FROM PhysicalDriveSize 
    GROUP BY DATEADD(m, DATEDIFF(m, 0, logDate), 0) 
) 
SELECT CAST(MIN(t.logDate) AS DATE) AS [Date], Drive, MIN(t.Free) AS [PercentagFree] 
FROM PhysicalDriveSize AS t 
JOIN cte AS m 
ON t.logDate = m.Daily 
WHERE t.Free <= 10 AND t.Free >= 0 
GROUP BY Drive, logDate 

我想根据结果做一些操作,例如:

WITH cte AS 
(
    SELECT MAX(logDate) AS Daily 
    FROM PhysicalDriveSize 
    GROUP BY DATEADD(m, DATEDIFF(m, 0, logDate), 0) 
) 
SELECT MIN(t.Free) AS [PercentagFree] 
FROM PhysicalDriveSize AS t 
JOIN cte AS m 
ON t.logDate = m.Daily 
WHERE t.Free <= 10 AND t.Free >= 0 
GROUP BY Drive, logDate 
IF t.Free <= 10 AND t.Free >= 5 
PRINT 'Warning' 
Else 
PRINT 'Critical' 

我得到下面的错误,如果我if语句执行:

Msg 4104, Level 16, State 1, Line 13 The multi-part identifier "t.Free" could not be bound. Msg 4104, Level 16, State 1, Line 13 The multi-part identifier "t.Free" could not be bound 

我怎么能搞,如果没有错误的语句?

+0

你得到了什么错误? – MusicLovingIndianGirl

+0

消息4104,级别16,状态1,行13 无法绑定多部分标识符“t.Free”。 Msg 4104,Level 16,State 1,Line 13 无法绑定多部分标识符“t.Free”。 – user1071629

+0

你应该使用一个案例statmement – Ric

回答

2

尝试使用case when then这样的:

WITH cte AS 
(
    SELECT MAX(logDate) AS Daily 
    FROM PhysicalDriveSize 
    GROUP BY DATEADD(m, DATEDIFF(m, 0, logDate), 0) 
) 
SELECT MIN(t.Free) AS [PercentagFree], 
case when t.Free <= 10 AND t.Free >= 5 then 'Warning' 
    else 'Critical' end 
FROM PhysicalDriveSize AS t 
JOIN cte AS m 
ON t.logDate = m.Daily 
WHERE t.Free <= 10 AND t.Free >= 0 
GROUP BY Drive, logDate 

编辑:

如果你想发送的消息,你可以尝试创建一个临时变量像

DECLARE @x int; 
WITH cte AS 
(
    SELECT MAX(logDate) AS Daily 
    FROM PhysicalDriveSize 
    GROUP BY DATEADD(m, DATEDIFF(m, 0, logDate), 0) 
) 
SELECT @x = MIN(t.Free) AS [PercentagFree] 
FROM PhysicalDriveSize AS t 
JOIN cte AS m 
ON t.logDate = m.Daily 
WHERE t.Free <= 10 AND t.Free >= 0 
GROUP BY Drive, logDate 
if(@x is not null) 
    PRINT 'Warning' 
Else 
    PRINT 'Critical' 
+0

我得到了下面的错误“不正确的语法靠近关键字的情况下。”。 – user1071629

+0

@ user1071629: - 逗号错误。更新。现在试试! –

+0

代码正在工作,但目的是在发送警报邮件之后,而不是警告和关键。 – user1071629

1

你可以这样使用:

IF(t.Free <= 10 AND t.Free >= 0, 'Warning', 'Critical') as free 
+0

't.Free> = 0'条件怎么样? –

+0

看到我更新的答案 –