我正在处理一个查询,我希望MG.Actid
显示为SELECT
列但不在group by
内,因为它没有列出我想要的结果。如果我在group by
中拥有它,那么组结构就会被破坏。请让我知道如何将其保留在选择列中,然后将其从group by
中删除。
仅针对group by
,SR.Rsrcid
,sr.frsntnm
sr.lstm
查询:
SELECT
(SR.LstNm+ ', '+ SR.FrstNm) as 'Employee Name',
MG.Actid as goalid,
SR.Rsrcid as EmpID,
COUNT(Mg.ActID) '# Goals',
SUM(CASE
WHEN PrntActID != '' THEN 1
ELSE 0
END) AS '# Aligned'
FROM TM.SResource AS SR
LEFT OUTER JOIN TM.MatrixGoal AS Mg
ON SR.RsrcID = MG.RsrcID AND MG.DelFlg = 0
WHERE MG.ActiveFlg = 1
GROUP BY SR.RsrcId,SR.LstNm,SR.FrstNm
ORDER BY SR.LstNm,SR.FrstNm
答案 0 :(得分:0)
执行此操作的一种方法是使用'分区。聚合函数中的子句(如SUM和COUNT),然后从数据集中选择不同的行。实际上,您将group by语句移动到每个聚合的分区,如下所示:
SELECT DISTINCT
(SR.LstNm+ ', '+ SR.FrstNm) as 'Employee Name',
MG.Actid as goalid,
SR.Rsrcid as EmpID,
COUNT(Mg.ActID) OVER (PARTITION BY SR.RsrcId,SR.LstNm,SR.FrstNm) '# Goals',
SUM(CASE
WHEN PrntActID != '' THEN 1
ELSE 0
END) OVER (PARTITION BY SR.RsrcId,SR.LstNm,SR.FrstNm) AS '# Aligned'
FROM TM.SResource AS SR
LEFT OUTER JOIN TM.MatrixGoal AS Mg
ON SR.RsrcID = MG.RsrcID AND MG.DelFlg = 0
WHERE MG.ActiveFlg = 1
ORDER BY SR.LstNm,SR.FrstNm