如何按

时间:2015-07-23 19:41:28

标签: sql group-by

我正在处理一个查询,我希望MG.Actid显示为SELECT列但不在group by内,因为它没有列出我想要的结果。如果我在group by中拥有它,那么组结构就会被破坏。请让我知道如何将其保留在选择列中,然后将其从group by中删除。

仅针对group bySR.Rsrcidsr.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

1 个答案:

答案 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