SQL Server - 在Group By查询中获取特定数据

时间:2011-05-11 21:34:51

标签: sql join subquery

我有一个SQL存储过程,总计棒球队的结果。我'分组'适当的列并将我需要的其他列与所选查询的总统计数相加。它工作正常,给我我想要的结果。

我遇到的情况是一个玩家可以属于相同赛季中不同球队的情况,我无法按球队分组。我所做的是我使用子查询来获得玩家的当前团队。再次,工作正常。但我需要获得更多个人信息,例如球员当前的teamID。我不能在上面提到的子查询中组合两列。针对主查询运行多个子查询是不好的做法吗?在使用Group By时,是否有其他方法可以从查询中获取特定(或不同)信息?

修改 添加了表模式。

SELECT LS.SeasonName, A.SeasonID, PM.PlayerID, PM.PFirstName, PM.PLastName,
(SELECT     ILT.TeamName
                        FROM          League_T AS ILT INNER JOIN
                                               Season_T AS IST ON ILT.TeamID = IST.TeamID INNER JOIN
                                               Season_P AS ISP ON IST.SeasonTeamID = ISP.Season_TeamID
                        WHERE      (ISP.PlayerID = PM.PlayerID) AND (ISP.IsCurrent = 1)) AS 'CurrentTM', 
                       (SELECT     ILT.TeamID
                        FROM          League_Team AS ILT INNER JOIN
                                               Season_Team AS IST ON ILT.TeamID = IST.TeamID INNER JOIN
                                               Season_P AS ISP ON IST.SeasonTeamID = ISP.Season_TeamID
                        WHERE      (ISP.PlayerID = PM.PlayerID) AND (ISP.IsCurrent = 1)) AS 'CurrentTMID', 
Count(Case WHEN GS = 1 THEN GS END) AS GS, --multiple SUM columns here--
FROM Player_Master PM
INNER JOIN Season_P ON PM.PlayerID = Season_P.PlayerID 
INNER JOIN Season_S AS A 
INNER JOIN Season_SD AS B ON A.GameID = B.GameID
INNER JOIN Season_PP AS C ON B.OutcomeID = C.OutcomeID ON Season_P.Season_PlayerID = C.SeasonPlayerID
INNER JOIN League_Season AS LS ON A.SeasonID = LS.SeasonID
WHERE (B.TeamID = @TeamID) AND (LS.IsCurrent = 1)
Group By LS.SeasonName, A.SeasonID, PM.PlayerID, PM.PFirstName, PM.PLastName

1 个答案:

答案 0 :(得分:0)

如果您的查询需要相关子查询,那么这没有任何问题...假设您实际上需要来执行此操作。

你不能JOIN到“玩家”表,然后根据“player.current_team”栏加入“球队”表吗?