2013-05-28 4 views
-1

Я пытаюсь выполнить запрос:Выберите отчетливый с присоединиться и группой

Select Distinct table2.columnA columnA_0 , 
     table3.columnB columnB_1 , 
     table2.columnC columnC_2 
    From table4 Join table1 on table4.columnD = table1.columnD 
      Left Outer Join table2 on table2.columnD = table1.columnD 
      Left Outer Join table3 on table3.columnE = table2.columnE 
      where table2.columnA IS NOT NULL 
      group by dbo.table2.columnA 

, но я получаю ошибку

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

Может кто-нибудь сказать мне, почему?

+0

Почему вы используете 'distinct' и' group by'? SQL Server требует, чтобы все столбцы в списке выбора были в группе, если она не находится в агрегированной функции. Удалите группу. – Taryn

+1

Какова цель группы, если вы не используете агрегаты? – bummi

ответ

2

почему в том, что все столбцы в выбранной части запроса (table2.columnA columnA_0, table3.columnB columnB_1, table2.columnC columnC_2) должны быть включены в GROUP BY п, ИЛИ использоваться в агрегатной функции, как SUM, MIN, MAX и т.д.

+0

Oh duh. Спасибо за это. Плохой мозговой пердит. – rjbogz

1

Это связано с тем, что вы явно группируете table2.columnA, но некоторые из значений в предложении select не агрегируются и не группируются. Поскольку вам нужны разные значения (на основе вашего включения отдельного ключевого слова), просто удалите пункт group by.

Если вы ранее использовали MySQL, это может быть для вас новичком - MySQL допускает включение в предложение select сгруппированного запроса неагрегированных, негруппированных столбцов; большинство других РСУБД этого не делают.

+0

Да, я использовал mysql, но теперь мне нужно использовать сервер sql. До сих пор было несколько вещей, которые я до сих пор досаждал. Спасибо за ответ. :-) – rjbogz

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