2015-07-19 1 views
0

Я видел несколько тем об использовании этих трех функций, но я не могу получить результаты, которые я хочу, исходя из того, что я читаю.GROUP BY, HAVING и COUNT, чтобы получить агрегированные результаты

Я использую SQL Server 2012. Таблица APXFirm.AdvApp.vPerformance Здесь схема таблицы

table schema Я попробовал следующий запрос:

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 

Я не уверен, что мне нужен подзапрос, соединение или использование отдельных в счете для достижения этого или чего-то еще. Я также пробовал эту строку, но это не изменило результат.

,COUNT(DISTINCT portfoliobasecode) AS Pcount 

Благодаря

ответ

2

У вас есть слишком много столбцов в 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.

+0

Этот запрос объединяет все в одну строку и показывает только первый файл portfoliobasecode. В этом случае Test, чтобы получить результат теста 3 –

+0

@JayC. , , Это должно создать одну строку для каждого значения 'PortfolioBaseCode', который, кажется, будет тем, что вы хотите. Если вы получаете только одно значение, то предложения 'WHERE' и' HAVING' фильтруют все остальное. –

+0

Да, я считаю, что он работает сейчас. –

 Смежные вопросы

  • Нет связанных вопросов^_^