GROUP BY、HAVING 和 COUNT 以获得聚合结果

GROUP BY, HAVING, and COUNT to get aggregated results

我看过一些关于使用这三个函数的帖子,但我无法根据阅读的内容获得我想要的结果。

我正在使用 SQL SERVER 2012。table 是 APXFirm.AdvApp.vPerformance 这是 table 架构

我尝试了以下查询:

USE APXFirm
SELECT PortfolioBaseCode
 ,COUNT(  portfoliobasecode) AS Pcount
  FROM APXFirm.AdvApp.vPerformance
        WHERE rowtypecode = 'd'   
        and DetailKeyCode is NOT NULL
        and NetOrGrossCode = 'n'
and DetailKeyCode <> 'us'
and PortfolioBaseCode IN ('test','test2')
GROUP BY PortfolioBaseCode,
      NetOrGrossCode, 
            RowTypeCode ,
           DetailKeyCode ,
           MarketValue 
 HAVING marketvalue > 1

但这给了我这样的结果:

PortfolioBaseCode   Pcount
test                 1
test                 1
test                 1
test2                1
test2                1
test2                1
test2                1

我想要这样的结果

PortfolioBaseCode   Pcount
test                 3
test2                4

我不确定我是否需要子查询、联接或在计数中使用 distinct 来实现此目的或其他目的。我也试过这条线,但它没有改变结果。

 ,COUNT( DISTINCT portfoliobasecode) AS Pcount

谢谢

替换

HAVING marketvalue > 1

HAVING Pcount > 1

group by 中的列过多。我想你只是想要:

SELECT PortfolioBaseCode, COUNT(  portfoliobasecode) AS Pcount
FROM APXFirm.AdvApp.vPerformance
WHERE rowtypecode = 'd' AND  
      DetailKeyCode is NOT NULL AND
      NetOrGrossCode = 'n' AND
      DetailKeyCode <> 'us' AND
      PortfolioBaseCode IN ('test', 'test2')
GROUP BY PortfolioBaseCode
HAVING SUM(marketvalue) > 1;

我实际上不确定 HAVING 子句应该做什么。也许你可以删除它。也许您可以将逻辑 marketvalue > 1 移动到 WHERE 子句。