2013-07-02 2 views
2

Я пытаюсь выполнить запрос SQL (MSSQL 2005), как следующее:получил ошибку в запросе SQL с группой по

select top 20 d_date, date1, date2 
from reestr_calculated 
where reestr_id=2 
group by date2 
order by date2 desc 

и я получаю следующее сообщение об ошибке:

Column 'reestr_calculated.d_date' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Кто-нибудь знает как я могу справиться с этой ошибкой?

ответ

0

Когда вы используете GROUP BY, несколько строк получают «рухнувшие» в одну строку. Чтобы определить, какая из этих строк в группе должна отображаться, вы должны использовать агрегатную функцию.

MIN() или SUM() или другие.

Как это:

select top 20 MIN(d_date), MAX(date1), date2 
from reestr_calculated 
where reestr_id=2 
group by date2 
order by date2 desc 

или как это:

select top 20 d_date, date1, date2 
from reestr_calculated 
where reestr_id=2 
group by d_date, date1, date2 
order by date2 desc 
+0

понял! Спасибо вам, ребята! – Konstantinos

3

Все имена столбцов, представленные в SELECT, должны присутствовать в GROUP BY, если вы не используете агрегированные функции. Следовательно, добавьте date1 также в группу.

0

Вы группирование по date2, что означает возвращение на одну строку для каждого date2 значения. Каждое значение date2 может иметь несколько значений d_date или date1, поэтому SQL не знает, какие значения возвращать для каждого из них.

Как говорит ошибка, вам необходимо либо агрегатную функцию (MAX(), MIN(), AVG() и т.д.) или включить другие столбцы в GROUP BY п

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