2014-01-20 5 views
0

Я пытаюсь показать количество котировок, сделанных в течение определенного периода, суммировать прогноз для каждого и сгруппировать их лицом, создавшим цитату. Ниже мой запрос ... но я думаю, что я делаю что-то не так с группой, но я не знаю, что. Я использую стандартный SQL 2008. Любая помощь будет принята с благодарностью.SQL Query Group по Trouble

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