在SELECT查询中添加一列,但不参与分组
我有以下查询:
SELECT
MAX(F.Surname + ', ' + F.First_Name) AS Female,
ISNULL(MAX(M.Surname + ', ' + M.First_Name),'') AS Male,
MAX(CP.Comp_Date) AS Comp_Date,
H.PtsFemale, H.PtsMale AS PtsMale,
ISNULL(MAX(F.eMail_Address), '') AS eMail,
MAX(F.Registered + 0) AS registered,
ISNULL(REPLACE(MAX(F.First_Name + ' ' + F.Surname), '.', ''), '') AS Fname,
ISNULL(REPLACE(MAX(M.First_Name + ' ' + M.Surname), '.', ''), '') AS Mname
FROM
tblPtsPerCompHistory as H
LEFT JOIN
tblCompetitors F ON F.Competitor_Idx = H.PtsFemale
LEFT JOIN
tblCompetitors M ON M.Competitor_Idx = H.PtsMale
LEFT OUTER JOIN
tblCouples C ON C.CoupleID = H.PtsCplID
JOIN
tblCompetitions CP ON CP.Competition_Idx = H.PtsCompID
WHERE
F.Surname + ' ' + F.First_Name IS NOT NULL
GROUP BY
H.PtsFemale, H.PtsMale
ORDER BY
1, 3 DESC
我需要把下面这个查询的结果作为结果集中的一列添加进去:
(SELECT CoupleNumber FROM tblCouples WHERE CoupleID = H.PtsCplID Order by Yearcpl DESC) As CoupleNumber
每年,合伙关系中的Couplenumber都会发生变化,因此需要获取最新的值。
我在“未包含在分组中”这个条件上遇到了问题,如果把它加入到最外层的SELECT语句,就会得到“ORDER BY不能内联使用”的错误。据我所读,我想像像CTE这样的结构,或者也许CROSS APPLY也有可能实现这一点,但我不确定。
解决方案
选项1
SELECT max(F.Surname +', '+ F.First_Name) AS Female, ISNULL(max(M.Surname +', '+ M.First_Name),'') as Male, Max(CP.Comp_Date) As Comp_Date, H.PtsFemale, H.PtsMale as PtsMale, MAX(CPL.CoupleNumber) AS CoupleNumber, ISNULL(max(F.eMail_Address),'') as eMail, max(F.Registered+0) as registered,
ISNULL(REPLACE(max(F.First_Name +' '+ F.Surname),'.',''),'') AS Fname, ISNULL(REPLACE(max(M.First_Name +' '+ M.Surname),'.',''),'') as Mname
From tblPtsPerCompHistory as H
LEFT JOIN tblCompetitors F on F.Competitor_Idx = H.PtsFemale
LEFT JOIN tblCompetitors M on M.Competitor_Idx = H.PtsMale
LEFT OUTER JOIN tblCouples C ON C.CoupleID = H.PtsCplID
OUTER APPLY (
SELECT TOP 1 CoupleNumber
FROM tblCouples
WHERE CoupleID = H.PtsCplID
ORDER BY Yearcpl DESC
) AS CPL
JOIN tblCompetitions CP ON CP.Competition_Idx = H.PtsCompID
WHERE F.Surname +' '+ F.First_Name is not null
GROUP BY H.PtsFemale, H.PtsMale
ORDER BY 1, 3 DESC
更简单的做法是:
SELECT max(F.Surname +', '+ F.First_Name) AS Female, ISNULL(max(M.Surname +', '+ M.First_Name),'') as Male, Max(CP.Comp_Date) As Comp_Date, H.PtsFemale, H.PtsMale as PtsMale, MAX(CPL.CoupleNumber) AS CoupleNumber, ISNULL(max(F.eMail_Address),'') as eMail, max(F.Registered+0) as registered,
ISNULL(REPLACE(max(F.First_Name +' '+ F.Surname),'.',''),'') AS Fname, ISNULL(REPLACE(max(M.First_Name +' '+ M.Surname),'.',''),'') as Mname
From tblPtsPerCompHistory as H
LEFT JOIN tblCompetitors F on F.Competitor_Idx = H.PtsFemale
LEFT JOIN tblCompetitors M on M.Competitor_Idx = H.PtsMale
OUTER APPLY (
SELECT TOP 1 CoupleNumber
FROM tblCouples
WHERE CoupleID = H.PtsCplID
ORDER BY Yearcpl DESC
) AS CPL
JOIN tblCompetitions CP ON CP.Competition_Idx = H.PtsCompID
WHERE F.Surname +' '+ F.First_Name is not null
GROUP BY H.PtsFemale, H.PtsMale
ORDER BY 1, 3 DESC
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。