|
Условие в запросе
|
|||
---|---|---|---|
#18+
Доброго времени суток. Сделал запрос, который возвращает мне общее количество чеков за определённый месяц. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Сейчас настала необходимость добавить условие диапазона чеков. Пытался добавить вот такое условие: Код: sql 1.
Но пишет, что в where нельзя использовать агр. функцию. в having если добавить, то будет считать уже всю сумму по всем чекам сразу. В каком месте и что нужно исправить(добавить)? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 17:25 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
Прогер_самоучка, открой для себя having ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 17:32 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
Павел ВоронцовПрогер_самоучка, открой для себя having Вы до конца прочитали стартовый пост ? Прогер_самоучка в having если добавить, то будет считать уже всю сумму по всем чекам сразу. В каком месте и что нужно исправить(добавить)? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 17:35 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
> в having если добавить, то будет считать уже всю сумму по всем чекам сразу с чего вы взяли? суммы будут считаться согласно группировке. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 17:37 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
Прогер_самоучка Код: sql 1. 2. 3.
Это вот что: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 17:38 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
daw> в having если добавить, то будет считать уже всю сумму по всем чекам сразу с чего вы взяли? суммы будут считаться согласно группировке. Я понимаю, что согласно группировке. Ещё бы и понять каким образом. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 17:47 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
iapПрогер_самоучка[/src]Это вот что: Код: sql 1.
Не совсем вас понял. Это вы спросили или поправили?) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 17:49 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
> Я понимаю, что согласно группировке. Ещё бы и понять каким образом. то есть, что значит "каким"? ну выведите ее в select-листе: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
вот эта сумма и будет проверяться в having. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 17:54 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
daw> Я понимаю, что согласно группировке. Ещё бы и понять каким образом. то есть, что значит "каким"? ну выведите ее в select-листе: вот эта сумма и будет проверяться в having. Выводил я так в select. Поэтому и говорю, что будет считать сумму сразу всех чеков. Было вот так с добавлением having Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 18:00 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
Прогер_самоучкаdaw> Я понимаю, что согласно группировке. Ещё бы и понять каким образом. то есть, что значит "каким"? ну выведите ее в select-листе: вот эта сумма и будет проверяться в having. Выводил я так в select. Поэтому и говорю, что будет считать сумму сразу всех чеков. Было вот так с добавлением having Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
З.Ы. Исправленный вариант ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 18:02 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
> count(distinct op.smid) as [Чеки] ааа, distinct. догадываюсь кажется. у вас join-ы "размножают" строки в op и суммы странные получаются? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 18:02 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
чтобы понятнее стало, вы уберите группировку и посмотрите, что выводится. а "как бороться?" - ну, в вашем случае можно эти join-ы через exists переписать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 18:05 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
daw> count(distinct op.smid) as [Чеки] ааа, distinct. догадываюсь кажется. у вас join-ы "размножают" строки в op и суммы странные получаются? Запредельные суммы получаются))) Количество чеков запрос выдаёт правильное. Вот как прописать сие условие, что на каждый чек, пока не соображу. Подозреваю, что эта "странная сумма" как раз и сумма сразу всех чеков. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 18:07 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
dawчтобы понятнее стало, вы уберите группировку и посмотрите, что выводится. а "как бороться?" - ну, в вашем случае можно эти join-ы через exists переписать.Добавил бы: уберите группировку и поставьте фильтр по какому-нибудь (может по очереди по разным) OP.SMID чтобы (на обозримом количестве данных) убедиться в отсутствии задваивания строк. Может быть, и от DISTINCT в COUNT удастся избавиться :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 18:59 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
Прогер_самоучкаiapпропущено... Это вот что: Код: sql 1.
Не совсем вас понял. Это вы спросили или поправили?)Заменил на эквивалент ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 20:28 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
iapЗаменил на эквивалент На самом деле это часть собирается в программе, поэтому там именно так :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2013, 08:36 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
Прогер_самоучкаВыводил я так в select. Поэтому и говорю, что будет считать сумму сразу всех чеков. Было вот так с добавлением havingНе зная схему данных трудно угадывать, но скорей всего Вам нужно что-то типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2013, 09:13 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
Прогер_самоучкаiapЗаменил на эквивалент На самом деле это часть собирается в программе, поэтому там именно так :)на самом деле и в программе это лучше заменить на (@code=-1 or code=@code) and (@f1=-1 or f1=@f1) :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2013, 09:17 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
Павел ВоронцовНе зная схему данных трудно угадывать+100500 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2013, 09:23 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
Павел ВоронцовПрогер_самоучкаВыводил я так в select. Поэтому и говорю, что будет считать сумму сразу всех чеков. Было вот так с добавлением havingНе зная схему данных трудно угадывать, но скорей всего Вам нужно что-то типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Очень даже похоже. Только не пойму, почему ничего не возвращает. Внутренний запрос отрабатывает. А по внешнему почему-то нет. З.Ы. Под схемой данных вы подразумеваете структуры таблиц ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2013, 10:19 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
Прогер_самоучкаОчень даже похоже. Только не пойму, почему ничего не возвращает. Внутренний запрос отрабатывает. А по внешнему почему-то нет. Разобрался вроде бы. Нужно было в конце в группировке указать колонку chks по которой группировка chks ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2013, 10:24 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
Доброго времени суток. Есть запрос, в котором есть условие Код: sql 1. 2.
Раньше этот запрос отрабатывал нормально. Сейчас выскакивает ошибка: Код: plaintext
Но, поля Code и F1 в базе имеют тип int. раньше стоял ms sql server 2000. Сейчас: Код: sql 1. 2. 3. 4.
Хотелось бы прояснения ситуации. Заранее благодарю за ответы. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 14:05 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
Прогер_самоучка, тип полей тут вообще ни при чем, любое из этох двух вызовет ту же ошибку: Код: sql 1. 2.
но ответьте плиз, откуда такой огород, почему не подходит Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 14:27 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
капец полный, вроде, выше говорилось, что это частный случай скрипта, генерирующегося автоматически ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 14:31 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
а тип параметра какой? Скорее всего, что-то вроде этого: Код: sql 1. 2. 3. 4. 5. 6.
исправьте тип на int - ошибка уйдет ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 14:31 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
капец полныйно ответьте плиз, откуда такой огород, почему не подходит Код: sql 1.
Потому что написанные выше условия BETWEEN эквивалентны Код: sql 1.
а не тем, что Вы написали. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 14:34 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
капец полныйПрогер_самоучка, тип полей тут вообще ни при чем, любое из этох двух вызовет ту же ошибку: Код: sql 1. 2.
Я понимаю, иначе вопроса не было бы) капец полныйно ответьте плиз, откуда такой огород, почему не подходит Код: sql 1.
Чуть выше описано почему сделано именно так. Если было так просто, я бы не стал усложнять себе жизнь. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 14:35 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
извиняюсь, да, я "не в теме", т.к. там перерыв между постами и начало осталось непрочтенным. могу только предположить, что у него изменилось поведение по приведению типов вот такое Код: sql 1. 2. 3.
показывает, что на этапе nullif(-1,-1), тип выражения не определен. ну и раскомментарив последнюю строку, имеем ту же ошибку. т.е. он от типа NULL перешел почему-то к SMALLINT, а 2000-ый наверное честно оценивал второй аргумент и понимал, что все приводится к INT ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 14:46 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
=)8)а тип параметра какой? Скорее всего, что-то вроде этого: Код: sql 1. 2. 3. 4. 5. 6.
исправьте тип на int - ошибка уйдет @code- это значения из поля формы. Они берутся из таблиц и все имеют тип int. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 14:47 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
тем не менее, насильное указание типа помогает: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 14:51 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
При выполнении запроса SQL смотрит не на тип поля данных, а определяет тип по результату операции, переведите результат в формат int и будет вам счастье Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 15:00 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
ну, кажись да, если ему тип насильно не указать, он считает, что SMALLINT Код: sql 1. 2. 3.
----------------------- int NULL smallint ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 15:05 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
капец полныйну, кажись да, если ему тип насильно не указать, он считает, что SMALLINT Код: sql 1. 2. 3.
----------------------- int NULL smallintЭто потому, что для -1 минимальный по размеру целый тип - SMALLINT. Если не ошибаюсь, такое поведение (и много других сюрпризов с типами) началось с SQL2005. И, кстати, в своё время здесь это обсуждалось неоднократно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 15:09 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
А вот почему -2147483648 приводится к типу SMALLINT, - вот что непонятно. Ибо логично было бы и этот литерал преобразовать к минимальному для него типу INT, а потом оба аргумента к типу с бОольшим приоритетом, то есть, INT ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 15:13 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
Владимир МеньшиковПри выполнении запроса SQL смотрит не на тип поля данных, а определяет тип по результату операции, переведите результат в формат int и будет вам счастье Код: sql 1.
Пытался сначала это сделать в программе функцией CInt (VBA). Но в итоге сервер снова приводил к smallint. Воспользовался вашим советом. Большое спасибо. З.Ы. Остальным участникам тоже спасибо за активное участие и помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 15:22 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
iapА вот почему -2147483648 приводится к типу SMALLINT, - вот что непонятно. Ибо логично было бы и этот литерал преобразовать к минимальному для него типу INT, а потом оба аргумента к типу с бОольшим приоритетом, то есть, INT потому что ISNULL так работает - пытается вернуть результат с типом первого аргумента Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 15:23 |
|
Условие в запросе
|
|||
---|---|---|---|
#18+
ShakilliapА вот почему -2147483648 приводится к типу SMALLINT, - вот что непонятно. Ибо логично было бы и этот литерал преобразовать к минимальному для него типу INT, а потом оба аргумента к типу с бОольшим приоритетом, то есть, INT потому что ISNULL так работает - пытается вернуть результат с типом первого аргумента Код: sql 1.
Да. Запамятовал что-то. Причём сейчас ясно вспомнил, как мы когда-то это обсуждали. Кстати, COALESCE ведёт себя совершенно иначе - приводит все свои аргументы к типу с максимальным приоритетом. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2013, 15:27 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1706110]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
163ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 230ms |
total: | 500ms |
0 / 0 |