2014-01-05 113 views
0

我正在創建一個電子商務基準站點。我有我的GETSITES一些問題存儲過程:SQL查詢存儲過程錯誤

代碼:

CREATE PROC USER_S_GETSITES 
    @CategoryID int, 
    @List int, 
    @IsPopular bit, 
    @MaxID int, 
    @Status bit, 
    @Word text 
AS 
    SELECT s.*, c.*, AVG(r.Rate) AS RateAVG, Count(r.ID) AS RateCount 
    FROM Sites AS s 
    INNER JOIN Rates AS r ON r.SiteID = s.ID 
    INNER JOIN Categories AS c ON c.ID = s.CategoryID 
    WHERE (@CategoryID is NULL) OR s.CategoryID = @CategoryID 
     AND (@MaxID is NULL) OR s.ID < @MaxID 
     AND (@Status is NULL) OR s.Status = @Status 
     AND r.Status=1 
     AND (@Word is NULL) OR s.Name LIKE @Word OR s.Description LIKE @Word 
     AND (@IsPopular is NULL) OR [email protected] 
ORDER BY 
    CASE @List WHEN 1 THEN s.ID END ASC, 
    CASE @List WHEN 2 THEN s.ID END DESC, 
    CASE @List WHEN 3 THEN RateAVG END DESC, 
    CASE @List WHEN 4 THEN RateCount END DESC 

我的問題:

消息8120,級別16,狀態1,過程USER_S_GETSITES,9號線
列'Sites.ID'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。
消息207,級別16,狀態1,過程USER_S_GETSITES,行23
無效的列名'RateAVG'。
消息207,級別16,狀態1,過程USER_S_GETSITES,行24
無效的列名'RateCount'。

我無法解決這些問題。我該怎麼辦?

+2

列而不聚集函數(求和,計數等)必須在GROUP BY條款。 – Mihai

+0

將在未來的SQL Server版本中刪除'ntext','text'和'image'數據類型。避免在新的開發工作中使用這些數據類型,並計劃修改當前正在使用它們的應用程序。改爲使用'nvarchar(max)','varchar(max)'和'varbinary(max)'。 [詳見這裏](http://msdn.microsoft.com/en-us/library/ms187993.aspx) –

+0

每個非聚合列必須在group by子句中提及,我懷疑這意味着你不會獲得您希望在選擇網站和類別中的每個列時看到的數字。通常做這種事情的方式。是通過它的唯一鍵獲得一個聚合查詢和組,然後通過那個/那些鍵返回到原始數據。 –

回答

1

錯誤1:包括柱Sites.ID在像group by Sites.ID, ....

錯誤GROUP BY條款2:CASE @List WHEN 3 THEN AVG(r.Rate) AS RateAVG END DESC

錯誤3:CASE @List WHEN 4 THEN Count(r.ID) AS RateCount END DESC