【发布时间】:2013-04-04 09:21:28
【问题描述】:
这是我的查询
SELECT
*
FROM
Score AS NewScores
WHERE
InsertedDate >= DATEADD(mm, -3, GETDATE());
SELECT
ROW_NUMBER() OVER( ORDER BY NETT) AS Rank,
Name,
FlagImg,
Nett,
Rounds
FROM (
SELECT
Members.FirstName + ' ' + Members.LastName AS Name,
CASE
WHEN MenuCountry.ImgURL IS NULL THEN
'~/images/flags/ismygolf.png'
ELSE
MenuCountry.ImgURL
END AS FlagImg,
AVG(CAST(NewScores.NetScore AS DECIMAL(18, 4))) AS Nett,
COUNT(Score.ScoreID) AS Rounds
FROM
Members
INNER JOIN
Score
ON Members.MemberID = Score.MemberID
LEFT OUTER JOIN MenuCountry
ON Members.Country = MenuCountry.ID
WHERE
Members.Status = 1
GROUP BY
Members.FirstName + ' ' + Members.LastName,
MenuCountry.ImgURL
) AS Dertbl
ORDER BY;
查询是为基于 GridView 的排行榜提供一个结果集,我想要的是只获得不到 3 个月的分数的平均值。如您所见,我将其分为两部分,显然它给出了这样的错误。
消息 4104,第 16 级,状态 1,第 2 行
无法绑定多部分标识符“
NewScores.NetScore”。
这是因为AVG(CAST(NewScores.NetScore AS DECIMAL(18, 4))) AS Nett
我怎样才能使我可以在那里使用NewScores,所以我只能获得不到 3 个月的平均分数?
编辑:使用人们提供的答案,我通过在正确的位置使用连接解决了这个问题,这是正确的查询:
SELECT ROW_NUMBER() OVER(ORDER BY NETT) AS Rank, Name, FlagImg, Nett, Rounds FROM (SELECT Members.FirstName + ' ' + Members.LastName AS Name, CASE WHEN MenuCountry.ImgURL IS NULL THEN '~/images/flags/ismygolf.png' ELSE MenuCountry.ImgURL END AS FlagImg, AVG(CAST(NewScores.NetScore AS DECIMAL(18, 4))) AS Nett, COUNT(NewScores.ScoreID) AS Rounds FROM Members INNER JOIN (SELECT * FROM Score WHERE InsertedDate >= DATEADD(mm, -5, GETDATE())) NewScores ON Members.MemberID = NewScores.MemberID LEFT OUTER JOIN MenuCountry ON Members.Country = MenuCountry.ID WHERE Members.Status = 1 GROUP BY Members.FirstName + ' ' + Members.LastName, MenuCountry.ImgURL) AS Dertbl ORDER BY Nett ASC
【问题讨论】:
-
我可以通过在 WHERE 子句的末尾添加日期条件来完成同样的事情,但我也想知道如何使用选择别名来做到这一点。
-
你还没有加入表
NewScores这就是为什么列NetScore无法定位。 -
是的,我知道那部分,我正在尝试弄清楚如何在此查询中准确地加入它,以便它按照我想要的方式工作,到目前为止我尝试的加入失败了。