微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将嵌套的 from 语句复制到嵌套的 with 语句?

如何解决如何将嵌套的 from 语句复制到嵌套的 with 语句?

我创建了一个嵌套的 from 语句,如下所示:

SELECT Player.playerid,name as [Full Name],avgs as [Player Average],format(teamavg,'C') as [Team Average],Player.teamid,format((Team.teamavg - Player.avgs),'C') AS [Difference],yr as [Last Year]
        FROM (SELECT playerid,teamid,MAX(yearid) as yr,format(avg(salary),'c') AS avgs
                     FROM Spring_2021_BaseBall.dbo.Salaries 
                     GROUP BY playerID,teamid) Player,(SELECT teamid,yearid,avg(salary) AS teamavg
                FROM Spring_2021_BaseBall.dbo.Salaries 
                GROUP BY teamid,yearid) Team,(SELECT playerid,CONCAT(nameGiven,' (',nameFirst,')',' ',nameLast) as name 
                FROM Spring_2021_BaseBall.dbo.People ) Name
      WHERE Player.playerid = Name.playerid and 
            Player.teamid = Team.teamid and 
            Player.yr= Team.yearid
      ORDER BY Player.playerid ASC,yearid DESC

我正在尝试使用嵌套 with 语句重新创建相同的结果,我尝试了以下操作,但导致无法绑定多部分标识符。我如何解决这个问题,因为我认为我正确命名了每个查询

With Player (playerid,avgs)  as (SELECT playerid,MAX(yearid),'C') as avgs 
         FROM Spring_2021_BaseBall.dbo.Salaries 
         GROUP BY playerid,teamid),Team (teamid,teamavg) as (SELECT teamid,avg(salary) as teamavg
         FROM Spring_2021_BaseBall.dbo.Salaries 
         GROUP BY teamid,yearid),FullName (playerid,name) as (SELECT playerid,nameLast) as name 
         FROM Spring_2021_BaseBall.dbo.People)
Select Player.playerid,Player.yearid,Player.avgs,Team.teamavg,FullName.name 
         FROM Spring_2021_BaseBall.dbo.Salaries,Spring_2021_BaseBall.dbo.People
         WHERE Player.playerid = FullName.playerid and 
            Player.teamid = Team.teamid and 
            Player.yr= Team.yearid
         ORDER BY Player.playerid ASC,yearid DESC
go 

解决方法

最后一个 FROM 语句仍然引用原始表,而不是使用 WITH 语句定义的表。

如果你改变它

FROM Spring_2021_BaseBall.dbo.Salaries,Spring_2021_BaseBall.dbo.People

FROM Player,Team,FullName

应该给你预期的结果

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。