2016-08-01 2 views
1

У меня проблема с группой по в SQL ServerКак использовать группу в запросе SQL Server?

У меня есть этот простой SQL заявление:

select * 
from Factors 
group by moshtari_ID 

и я получаю эту ошибку:

Msg 8120, Level 16, State 1, Строка 1
Столбец «Factors.ID» недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

Это мой результат без группы по:

enter image description here

и это ошибка с группой по команде:

enter image description here

Где моя проблема?

+4

Вам нужно узнать о группировке. Сначала возьмите урок –

+0

Что вы пытаетесь достичь? Какой результат вы пытаетесь получить? – Mureinik

ответ

7

Как правило, после запуска GROUPing каждый столбец, указанный в вашем SELECT, должен быть либо столбцом в вашей GROUP, либо его некоторой совокупностью. Скажем, у вас есть таблица вроде этого:

| ID | Name  | City  | 
| 1 | Foo bar  | San Jose | 
| 2 | Bar foo  | San Jose | 
| 3 | Baz Foo  | Santa Clara | 

Если вы хотите, чтобы получить список всех городов в базе данных, и попробовал:

SELECT * FROM table GROUP BY City 

... что потерпит неудачу, потому что вы 'запрашивать столбцы (ID и имя), которые не указаны в предложении GROUP BY. Вы могли бы вместо этого:

SELECT City, count(City) as Cnt FROM table GROUP BY City 

... и что бы получить вам:

| City  | Cnt | 
| San Jose | 2 | 
| Santa Clara | 1 | 

... но НЕ будет получить вам идентификатор или название. Вы можете делать более сложные вещи, например. подзапросы или самостоятельные объединения, но в основном то, что вы пытаетесь сделать, невозможно, как указано. Разбейте свою проблему дальше (на что вы хотите, чтобы данные выглядели?) И оттуда.

Удачи вам!

1

Когда вы группируете группу, вы можете выбрать только те столбцы, которые вы группируете. Другие столбцы должны быть объединены. Это можно сделать с помощью таких функций, как min(), avg(), count(), ...

Почему это? Потому что с group by вы делаете несколько записей уникальными. Но как же колонка не уникальна? БД необходимо правило для тех, кто показывает, как отображать тогда - агрегацию.

0

Вам необходимо применить функцию совокупности, такую ​​как max(), avg(), count() в группе.

Например, этот запрос будет суммировать totalAmount для всех moshtari_ID

select moshtari_ID,sum (totalAmount) from Factors group by moshtari_ID; 

выход будет

moshtari_ID SUM 
2    120000 
1    200000 
-1

Попробуйте,

select * 
from Factorys 
Group by ID, date, time, factorNo, trackingNo, totalAmount, createAt, updateAt, bark_ID, moshtari_ID 
-1

, если применять положение группы, то вы можете только использовать столбцы групп и агрегатную функцию в списке

Синтаксис: ВЫБРАТЬ выражение1, выражения2, ... expression_n, aggregate_function (aggregate_expression) из таблиц [WHERE условия] GROUP BY выражение1, выражения2 ... expression_n [ORDER BY выражение [ASC | DESC]];

+0

Это не дает никакого дополнительного элемента. – PJProudhon

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