2014-07-26 44 views
0

此查詢運行良好,但是,當我將where子句添加到除最後一個之外的任何子查詢時,它會生成一個錯誤。下面提供了示例和錯誤。你能幫我解決這個語法錯誤?:語法錯誤時添加where子句到子選擇

SELECT Getdate()           AS PullTime, 
     (SELECT Min(sqlagentstatus) 
     FROM dbo.tracksqlagentstatus)      AS SQLAgentStatus, 
     (SELECT Max(memorygrants) 
     FROM dbo.trackmemorygrants)      AS MemoryGrants, 
     (SELECT Avg(pagelifeexpectancy) 
     FROM trackple)         AS PLE, 
     (SELECT Avg(freepages) 
     FROM dbo.trackfreepages)       AS FreePages, 
     (SELECT Avg(sqlprocesscpu) 
     FROM dbo.trackcpu 
     WHERE capturetime > Dateadd(minute, -5, Getdate()))AS CPU 

我需要一個where子句添加一些子查詢的,但是,當我做如下圖所示,它會產生一個錯誤。你知道我能做些什麼來解決這個錯誤嗎?被接收

SELECT Getdate()            AS PullTime, 
     (SELECT Min(sqlagentstatus) 
     FROM dbo.tracksqlagentstatus)      AS SQLAgentStatus, 
     (SELECT Max(memorygrants) 
     FROM dbo.trackmemorygrants)      AS MemoryGrants, 
     (SELECT Avg(pagelifeexpectancy) 
     FROM trackple)          AS PLE, 
     (SELECT Avg(freepages) 
     FROM dbo.trackfreepages)       AS FreePages 
     WHERE capturetime > Dateadd(minute, -5, Getdate()), 
     (SELECT Avg(sqlprocesscpu) 
     FROM dbo.trackcpu 
     WHERE capturetime > Dateadd(minute, -5, Getdate())) AS CPU 

錯誤消息:

Msg 102, Level 15, State 1, Line 12 
Incorrect syntax near ','. 
Msg 156, Level 15, State 1, Line 15 
Incorrect syntax near the keyword 'as'. 

這是Microsoft SQL Server數據庫。

回答

1

您的WHERE子查詢位於子查詢之外。如果你需要有WHERE,你也應該在子查詢中使用別名。這應該工作:

SELECT Getdate()           AS PullTime, 
    (SELECT Min(sqlagentstatus) 
    FROM dbo.tracksqlagentstatus)      AS SQLAgentStatus 
    , 
    (SELECT Max(memorygrants) 
    FROM dbo.trackmemorygrants)       AS MemoryGrants, 
    (SELECT Avg(pagelifeexpectancy) 
    FROM trackple)          AS PLE, 
    (SELECT Avg(freepages) 
    FROM dbo.trackfreepages X 
    WHERE X.capturetime > Dateadd(minute, -5, Getdate())) AS FreePages, 
    (SELECT Avg(sqlprocesscpu) 
    FROM dbo.trackcpu 
    WHERE capturetime > Dateadd(minute, -5, Getdate())) AS CPU