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'。
我無法解決這些問題。我該怎麼辦?
列而不聚集函數(求和,計數等)必須在GROUP BY條款。 – Mihai
將在未來的SQL Server版本中刪除'ntext','text'和'image'數據類型。避免在新的開發工作中使用這些數據類型,並計劃修改當前正在使用它們的應用程序。改爲使用'nvarchar(max)','varchar(max)'和'varbinary(max)'。 [詳見這裏](http://msdn.microsoft.com/en-us/library/ms187993.aspx) –
每個非聚合列必須在group by子句中提及,我懷疑這意味着你不會獲得您希望在選擇網站和類別中的每個列時看到的數字。通常做這種事情的方式。是通過它的唯一鍵獲得一個聚合查詢和組,然後通過那個/那些鍵返回到原始數據。 –