我有一個SQL Server查詢運行得很好 - 直到我將計算列添加到SELECT語句。然後我得到一個奇怪的SQL Server錯誤。查詢SQL Server SELECT語句中的聚合列
這裏的SQL:
SELECT
outmail_.MessageID_,
CONVERT(VARCHAR(10),outmail_.Created_,120) AS 'Issue',
lyrReportSummaryData.mailed,
lyrReportSummaryData.successes,
COUNT(*) AS 'opens',
COUNT(DISTINCT clicktracking_.MemberID_) AS 'unique_opens',
convert(decimal(3,1),((convert(float,[unique_opens]))/[successes]) * 100) AS 'Rate'
FROM
outmail_
RIGHT JOIN
clicktracking_ ON clicktracking_.MessageID_ = outmail_.MessageID_
RIGHT JOIN
lyrReportSummaryData ON lyrReportSummaryData.id = clicktracking_.MessageID_
GROUP BY
outmail_.MessageID_, CONVERT(VARCHAR(10), outmail_.Created_,120),
lyrReportSummaryData.mailed, lyrReportSummaryData.successes
問題是行開始與convert(decimal ...
當它被包括在內,我得到以下錯誤:
Error 8120: Column 'lyrReportSummaryData.unique_opens' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
我不知道如何解決這個錯誤,因爲我不知道如何在GROUP BY
條款中使用它(並且我似乎並不需要這麼做)。
有關如何進行的任何建議?謝謝。
看起來像這樣應該可以,但它會拋出一個語法錯誤:錯誤102:錯誤的語法靠近')'任何想法是什麼?謝謝。 – jalperin
我在查詢的最後錯過了'g'。一旦我補充說,一切工作。我顯然是一個MSSQL新手; 'g'表示什麼? – jalperin
g是子查詢的別名。你也可以給表別名,他們的工作原理是一樣的。例如'select s.staffid,s.name,p.payrate,p.startdate from staff s join payrate p on s.staffid = p.staffid' - 是的,這意味着您可以加入或對子附加額外的限制查詢。 – 2012-06-21 23:57:00