Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 После добавления COUNT не работает запрос, выдает ошибку.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
Здравствуйте.

Пишу в C++Builder, обращаюсь к MS SQL 2005.

Вот такой запрос:
SELECT dbalans, COUNT(*) as C FROM trains WHERE drocket IS NULL AND dLafet IS NULL AND dbalans<DATEADD(mi, 20,@dt) AND dbalans>DATEADD(mi,-20,@dt)ORDER BY dbalans ASC




До того как я добавил COUNT(*) , все было нормально.

Объясните , пожалуйста, в чем ошибка. Вроде все нормально делаю же.
11 апр 13, 10:19    [14165534]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
VitalikBV
Объясните , пожалуйста, в чем ошибка. Вроде все нормально делаю же.
Нужно добавить GROUP BY dbalans перед order by
11 апр 13, 10:20    [14165540]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
Glory
Member

Откуда:
Сообщений: 104751
VitalikBV
Объясните , пожалуйста, в чем ошибка. Вроде все нормально делаю же.

Надо делать не нормально, а как положено по синтаксису.
В сообщении об ошибке об этом сказано.
11 апр 13, 10:23    [14165558]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
VitalikBV
Вроде все нормально делаю же.
нет, не нормально
обычно принято приводить на форуме текст ошибки
11 апр 13, 10:23    [14165560]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
Glory
VitalikBV
Объясните , пожалуйста, в чем ошибка. Вроде все нормально делаю же.

Надо делать не нормально, а как положено по синтаксису.
В сообщении об ошибке об этом сказано.

Та здесь же смотрел: http://msdn.microsoft.com/ru-ru/library/ms175997(v=sql.90).aspx
11 апр 13, 12:20    [14166414]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
alexeyvg
VitalikBV
Объясните , пожалуйста, в чем ошибка. Вроде все нормально делаю же.
Нужно добавить GROUP BY dbalans перед order by


Спасибо, добавил то заработало.

Но почему-то возвращает единицу, хотя у меня там 8 строк подходящих для результата ... в dbalans все значения разные ... чего-то я недопонимаю ...

Вот так сделал:
SELECT dbalans, COUNT(*) as C FROM trains WHERE drocket IS NULL AND dLafet IS NULL AND dbalans<DATEADD(mi, 20,@dt) AND dbalans>DATEADD(mi,-20,@dt) GROUP BY dbalans ORDER BY dbalans ASC
11 апр 13, 12:25    [14166445]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
Паганель
VitalikBV
Вроде все нормально делаю же.
нет, не нормально
обычно принято приводить на форуме текст ошибки

Я прощелкал. Вы прав.

Вот такой был текст:
автор
Column 'trains.dbalans' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause'
11 апр 13, 12:26    [14166451]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
Glory
Member

Откуда:
Сообщений: 104751
VitalikBV
Та здесь же смотрел: http://msdn.microsoft.com/ru-ru/library/ms175997(v=sql.90).aspx

Синтакис надо проверять для всего _запроса_

VitalikBV
Но почему-то возвращает единицу, хотя у меня там 8 строк подходящих для результата ... в dbalans все значения разные ... чего-то я недопонимаю ...


Вам возвращается число записей с повторяющимися dbalans

Сообщение было отредактировано: 11 апр 13, 12:28
11 апр 13, 12:26    [14166457]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
Glory
VitalikBV
Та здесь же смотрел: http://msdn.microsoft.com/ru-ru/library/ms175997(v=sql.90).aspx

Синтакис надо проверять для всего _запроса_

VitalikBV
Но почему-то возвращает единицу, хотя у меня там 8 строк подходящих для результата ... в dbalans все значения разные ... чего-то я недопонимаю ...


Вам возвращается число записей с повторяющимися dbalans


Тогда я не понимаю технологию.
Я понимаю так: поскольку повторяющихся значений dbalans нету, то оно при группировке не уменьшит число строк ... и вот я беру и делаю COUNT этого числа строк ... должно 8 возвратить, а оно количество повторяющихся значений ...

Я сделал средствами среды разработки, то получилось как надо : query->RecordCount


Но все равно интересно бы узнать, почему оно так показывает? в чем логическая ошибка?
11 апр 13, 12:58    [14166681]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
Glory
Member

Откуда:
Сообщений: 104751
VitalikBV
Я понимаю так: поскольку повторяющихся значений dbalans нету, то оно при группировке не уменьшит число строк ... и вот я беру и делаю COUNT этого числа строк ... должно 8 возвратить, а оно количество повторяющихся значений ...

Все аггрегатные функцию работают в пределах указанных вами условий группировки
Если вам нужно число записей всего запроса, то зачем вы указываете группировку ?
11 апр 13, 13:04    [14166712]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
Glory
VitalikBV
Я понимаю так: поскольку повторяющихся значений dbalans нету, то оно при группировке не уменьшит число строк ... и вот я беру и делаю COUNT этого числа строк ... должно 8 возвратить, а оно количество повторяющихся значений ...

Все аггрегатные функцию работают в пределах указанных вами условий группировки
Если вам нужно число записей всего запроса, то зачем вы указываете группировку ?

А оно без нее не работало. Мне там в сообщении подсказали, я добавил - оно заработало. Ну и я , как понял, то оно вроде должно требуемый результат возвратить ...
11 апр 13, 13:18    [14166812]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
Glory
Member

Откуда:
Сообщений: 104751
VitalikBV
А оно без нее не работало.

Что такое "оно" ?

VitalikBV
Ну и я , как понял, то оно вроде должно требуемый результат возвратить ...

А вы где-то написали про требуемый вам результат ?
Процитируйте это место.
11 апр 13, 13:20    [14166823]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
Glory
VitalikBV
А оно без нее не работало.

Что такое "оно" ?

VitalikBV
Ну и я , как понял, то оно вроде должно требуемый результат возвратить ...

А вы где-то написали про требуемый вам результат ?
Процитируйте это место.


Ну "оно" в смысле запрос :)
А в результате мне нужно число записей которые выбираются SELECT'ом.
11 апр 13, 13:56    [14167049]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
VitalikBV,

Дык и посмотрите число записей средствами C++
11 апр 13, 13:58    [14167067]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
_djХомяГ
Guest
Как вариант - можно было бы без агрегации GROUP BY но с OVER()
т е
....count (*)  OVER() ......
11 апр 13, 14:01    [14167086]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
angel_zar
VitalikBV,

Дык и посмотрите число записей средствами C++


Так а я посмотрел, просто уже интересно стало.
11 апр 13, 14:52    [14167427]     Ответить | Цитировать Сообщить модератору
 Re: После добавления COUNT не работает запрос, выдает ошибку.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
_djХомяГ
Как вариант - можно было бы без агрегации GROUP BY но с OVER()
т е
....count (*)  OVER() ......

Спасибо, на будущее буду знать в какую сторону смотреть.
11 апр 13, 14:52    [14167434]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить