2014-01-20 87 views
0

我试图显示某段时间内引用的引用数量,对每个引用进行总和预测,并由创建引用的人员对它们进行分组。下面是我的查询......但我认为我正在做一些错误的小组,但我不知道是什么。我正在使用标准的SQL 2008.任何帮助将不胜感激。SQL查询分组遇到问题

SELECT 
    CAST(COUNT (DISTINCT QUOTES.Quote) AS SQL_CHAR) AS Number_of_Quotes, 
    SUM(Forecast) AS Amount_Forecast, 
    quotes.createdby 
FROM 
    Quotes 
WHERE 
    quotes.created>=? AND quotes.created<=? 
Group by 1 
+0

你可以把表结构,有些刀片进行测试?我在你的SQL中看不到错误 –

+0

如果'createdby'是你的第一列,它应该可以工作。 – Mihai

回答

1

您需要通过子句中使用createdby你的小组

SELECT 
    CAST(COUNT (DISTINCT QUOTES.Quote) AS SQL_CHAR) AS Number_of_Quotes, 
    SUM(Forecast) AS Amount_Forecast, 
    quotes.createdby FROM Quotes 
WHERE 
    quotes.created>=? AND quotes.created<=? 
Group by createdBy 
2

你的错误是由于这样的事实,你是一个聚合分组。您可以按列编号分组,但您的第一列包含count()。

您可以将1更改为3,也可以使用列名称。

+0

事实并未体现 –

0

GROUP BY子句中,您必须包含SELECT子句中的列。

如果你想要聚合由谁创造了它的预测,你应该做的像@Sachin@Dan Bracuk建议:

SELECT 
    CAST(COUNT (DISTINCT QUOTES.Quote) AS SQL_CHAR) AS Number_of_Quotes, 
    SUM(Forecast) AS Amount_Forecast, 
    quotes.createdby 
FROM quotes 
WHERE 
    quotes.created>=? AND quotes.created<=? 
GROUP BY quotes.createdby 

SELECT 
    CAST(COUNT (DISTINCT QUOTES.Quote) AS SQL_CHAR) AS Number_of_Quotes, 
    SUM(Forecast) AS Amount_Forecast, 
    quotes.createdby 
FROM quotes 
WHERE 
    quotes.created>=? AND quotes.created<=? 
GROUP BY 3 --equivalent because createdBy is the 3º column on the select clause