Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.95/78: Рейтинг темы: голосов - 78, средняя оценка - 4.95
nukanaka
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 10
1

Столбец недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

19.12.2011, 11:49. Просмотров 14901. Ответов 20
Метки нет (Все метки)

Доброго времени суток!
Помогите плиз с запросом, недавно работаю с SQL, помощь просто необходима.

Есть таблица типа:
10:04 ааа
10:06 ааа
10:09 ббб
10:15 ввв
10:16 ааа
10:19 ввв
10:22 ббб

Необходимо выбрать сгруппировав из таблицы сообщение, количество его повторений и дату последнего сообщения, чтобы в итоге было так:

ааа 3 10:16
ббб 2 10:22
ввв 2 10:19

Ругается:

"Столбец недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY."
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2011, 11:49
Ответы с готовыми решениями:

Столбец недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY
Добрый день. isnull((select isnull(sum(com.com_qty),0) com_qty from kmd_com...

Столбец "dbo.Seasontickets.ID" недопустим в списке выбора, поскольку он не содержится в агрегатной функции
Всем доброго времени суток. есть таблица TableName: ID int client_id int...

Вывод столбца который не содержится ни в статистической функции, ни в предложении GROUP BY
Есть запрос с подзапросом, в котором 4 столбца - цена, имя продукта, год и...

В списке выбора ComboBox1 содержится список городов. При выборе города в поле Edit1 вывести телефонный код
19. В списке выбора ComboBox1 содержится список городов. При выборе города в...

График статистической функции распределения
Мне нужно построить в статистическую функцию распределения. Есть 100...

20
Devil_FoX
161 / 135 / 1
Регистрация: 01.04.2010
Сообщений: 453
19.12.2011, 11:59 2
Цитата Сообщение от nukanaka Посмотреть сообщение
Ругается:
"Столбец недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY."
Ругается на что? Какой код запроса?
0
Ice_and_Fire
483 / 294 / 36
Регистрация: 22.06.2011
Сообщений: 929
19.12.2011, 12:05 3
T-SQL
1
2
3
Select st1,count(st2) , max(st3)
from t
group by st1
1
nukanaka
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 10
19.12.2011, 13:10  [ТС] 4
Цитата Сообщение от Ice_and_Fire Посмотреть сообщение
T-SQL
1
2
3
Select st1,count(st2) , max(st3)
from t
group by st1
Спасибо!
Все проще, чем я предполагал)

Добавлено через 15 минут
Тааак, задание усложнилось, есть еще справочная таблица.
запрос такой:

SQL
1
2
3
4
5
SELECT DISTINCT EAS_Mess.dt, EAS_IdMess.mess 
FROM EAS_Mess, EAS_IdMess 
WHERE EAS_Mess.mess=EAS_IdMess.idm AND (dt >= '20100915 10:00' AND dt <= '20111219 09:00') 
GROUP BY EAS_Mess.mess
ORDER BY dt ASC

Ругается вот так:
Сообщение 8120, уровень 16, состояние 1, строка 1
Столбец "EAS_Mess.dt" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.
0
Ice_and_Fire
483 / 294 / 36
Регистрация: 22.06.2011
Сообщений: 929
19.12.2011, 13:17 5
Что мешает указать EAS_Mess.d в group by ?
0
nukanaka
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 10
19.12.2011, 13:21  [ТС] 6
Цитата Сообщение от Ice_and_Fire Посмотреть сообщение
Что мешает указать EAS_Mess.d в group by ?
поправьте меня, если я не прав:
Если в group by указываем EAS_Mess.dt, тогда группироваться будет по дате, а даты в моем случае все разные
0
Ice_and_Fire
483 / 294 / 36
Регистрация: 22.06.2011
Сообщений: 929
19.12.2011, 13:32 7
Каждый столбец таблицы или представления в любом нестатистическом выражении в списке <select> должен быть включен в список GROUP BY (C) MSDN
SQL
1
GROUP BY EAS_Mess.mess, EAS_Mess.dt
0
nukanaka
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 10
19.12.2011, 13:37  [ТС] 8
Убрал сортировку и добавил в group by EAS_mess.dt, ошибка прежняя:

Сообщение 8120, уровень 16, состояние 1, строка 1
Столбец "EAS_IdMess.mess" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.
0
Ice_and_Fire
483 / 294 / 36
Регистрация: 22.06.2011
Сообщений: 929
19.12.2011, 13:49 9
T-SQL
1
GROUP BY EAS_Mess.mess, EAS_Mess.dt
0
nukanaka
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 10
19.12.2011, 13:52  [ТС] 10
Цитата Сообщение от Ice_and_Fire Посмотреть сообщение
T-SQL
1
GROUP BY EAS_Mess.mess, EAS_Mess.dt
SQL
1
2
3
4
SELECT DISTINCT EAS_Mess.dt, EAS_IdMess.mess 
FROM EAS_Mess, EAS_IdMess 
WHERE EAS_Mess.mess=EAS_IdMess.idm AND (dt >= '20100915 10:00' AND dt <= '20111219 09:00') 
GROUP BY EAS_Mess.mess, EAS_Mess.dt
Ошибка:
Сообщение 8120, уровень 16, состояние 1, строка 1
Столбец "EAS_IdMess.mess" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.


Вот как-то так!
0
Ice_and_Fire
483 / 294 / 36
Регистрация: 22.06.2011
Сообщений: 929
19.12.2011, 14:01 11
SELECT DISTINCT EAS_Mess.dt, EAS_IdMess.mess
GROUP BY EAS_Mess.mess, EAS_Mess.dt
Это не то поле!
0
nukanaka
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 10
19.12.2011, 14:16  [ТС] 12
Цитата Сообщение от Ice_and_Fire Посмотреть сообщение
Это не то поле!
Ага, исправил:

Столбец недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.


не ругается, но и не группирует сообщения.
0
Ice_and_Fire
483 / 294 / 36
Регистрация: 22.06.2011
Сообщений: 929
19.12.2011, 14:21 13
Цитата Сообщение от nukanaka Посмотреть сообщение
не ругается, но и не группирует сообщения.
А по какому признаку будет группировать? Где агрегатная функция?
Например max
SQL
1
SELECT DISTINCT MAX(EAS_Mess.dt), EASMess.mess
И обрати внимание на порядок следования столбцов в group by - он важен
0
nukanaka
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 10
19.12.2011, 14:29  [ТС] 14
как я писал в начале мне необходимо чтобы группировалось по сообщению (mess), считалось количество этих сообщений (count(mess)) и выводилась последняя дата сообщения (max(dt))

как это сделать? я очень-очень новичок, помогите плиз
0
Ice_and_Fire
483 / 294 / 36
Регистрация: 22.06.2011
Сообщений: 929
19.12.2011, 14:33 15
T-SQL
1
2
3
4
SELECT EASMess.mess, count (EASMess.mess), max(EAS_Mess.dt)
From [...]
Where [...]
Group by EASMess.mess
1
nukanaka
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 10
19.12.2011, 14:45  [ТС] 16
сделал вот так:

SQL
1
2
3
4
5
SELECT EAS_Mess.mess, COUNT (EAS_Mess.mess)/2 AS COUNT, MAX(EAS_Mess.dt) AS last_dt
FROM EAS_Mess, EAS_IdMess
WHERE EAS_Mess.mess=EAS_IdMess.idm 
AND (dt >= '20100915 10:00' AND dt <= '20111219 09:00')
GROUP BY EAS_Mess.mess
Все работает как надо!
только почему-то счетчик пришлось делить на 2, иначе считает сообщения дважды)
СПАСИБО!
0
homich77
79 / 78 / 4
Регистрация: 06.04.2009
Сообщений: 326
19.12.2011, 18:56 17
Цитата Сообщение от nukanaka Посмотреть сообщение
AND (dt >= '20100915 10:00' AND dt <= '20111219 09:00')
не проще сделать через between?

Добавлено через 1 минуту
Цитата Сообщение от nukanaka Посмотреть сообщение
FROM EAS_Mess, EAS_IdMess
WHERE EAS_Mess.mess=EAS_IdMess.idm
а здесь лучше сделать через inner join:
SQL
1
2
...
FROM EAS_Mess INNER JOIN EAS_IdMess ON EAS_Mess.mess=EAS_IdMess.idm
Добавлено через 2 минуты
Цитата Сообщение от nukanaka Посмотреть сообщение
только почему-то счетчик пришлось делить на 2, иначе считает сообщения дважды)
не очень понятно Аааа.. понятно ) Сделайте пожалуйста через inner join и ответьте - сомневаюсь что будет также нужно деление на 2. Потому что перечисление в FROM через запятую означает декартово произведение, если я не ошибаюсь
0
nukanaka
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 10
11.01.2012, 10:47  [ТС] 18
При таком запросе все равно выдает значения в два раза больше чем реальные:

SQL
1
2
3
4
SELECT DISTINCT EAS_IdMess.mess, COUNT (EAS_Mess.mess) AS dtconf, MAX(EAS_Mess.dt) AS dt 
FROM EAS_Mess INNER JOIN EAS_IdMess ON EAS_Mess.mess=EAS_IdMess.idm
AND (EAS_Mess.dt BETWEEN '20100915 10:00' AND '20111219 09:00')
GROUP BY EAS_IdMess.mess
0
Devil_FoX
161 / 135 / 1
Регистрация: 01.04.2010
Сообщений: 453
11.01.2012, 19:56 19
nukanaka, а проверь ка табл. EAS_Mess и EAS_IdMess на задвоенния.

T-SQL
1
2
3
4
5
6
7
8
9
select
    EAS_Mess.mess,
    EAS_Mess.dt,
    count(*) as N
from EAS_Mess
group by
    EAS_Mess.mess,
    EAS_Mess.dt
having count(*)>1
0
nukanaka
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 10
12.01.2012, 08:53  [ТС] 20
Цитата Сообщение от Devil_FoX Посмотреть сообщение
nukanaka, а проверь ка табл. EAS_Mess и EAS_IdMess на задвоенния.

T-SQL
1
2
3
4
5
6
7
8
9
select
    EAS_Mess.mess,
    EAS_Mess.dt,
    count(*) as N
from EAS_Mess
group by
    EAS_Mess.mess,
    EAS_Mess.dt
having count(*)>1
проверил этим запросом, в ответ пустота, решил проблему вот таким образом:

T-SQL
1
2
3
4
SELECT DISTINCT EAS_IdMess.mess, COUNT (EAS_Mess.mess)/2 AS dtconf, MAX(EAS_Mess.dt) AS dt 
FROM EAS_Mess INNER JOIN EAS_IdMess ON EAS_Mess.mess=EAS_IdMess.idm
AND (EAS_Mess.dt BETWEEN '20100915 10:00' AND '20111219 09:00')
GROUP BY EAS_IdMess.mess
0
12.01.2012, 08:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2012, 08:53

Содержится ли слово в списке
Всем привет. Помогите, пожалуйста, начинающей! Понимаю, что вопрос...

Определить, сколько гласных букв содержится в предложении
Считает но не верно, не могу найти ошибку program lab42; {$APPTYPE CONSOLE}...

Определить, содержится ли в заданном предложении введенное слово
Определить, содержится ли в заданном предложении введенное слово. Написать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru