Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL-запрос с having [D3, D5, dBase, FoxPro]


Fishka ©   (2002-09-24 12:04:00) 

Запрос вида:
select DATA, VIL_OPER, sum(VIL_OB)
from "C:\aa.dbf"
group by DATA,VIL_OPER
having sum(VIL_OB)-VIL_OPER>1

выдает некорректный результат.

Возникает вопрос: можно ли использовать в предложении HAVING значение поля группировки VIL_OPER (заранее известно, что в группе значение VIL_OPER одно и то же)?


Johnmen   (2002-10-01 09:55:00) [1]

(... having sum(VIL_OB)-VIL_OPER>1 )
1. Пробовал на реальной таблице IB-шной базы. (все Ок !)
2. Стандарт SQL92 не запрещает таких ограничений на группу.
3. Видимо, dBase, FoxPro не поддерживают такой синтаксис...


Fishka   (2002-10-01 09:04:00) [2]

Fishka (24.09.02 12:04)
заранее известно, что в группе значение VIL_OPER одно и то же

К сожалению, вещи разные, и результат разный.
Вы создали файлик и сделали запрос такого типа?
Или это просто рассуждения, теория?


Johnmen   (2002-09-30 17:19:00) [3]

Виноват...Вещи разные, но результат один !


Johnmen   (2002-09-30 17:12:00) [4]

Все уже попробовано и работает...

А вот дальше интересно...
Сначала ты хотел having sum(VIL_OB)-VIL_OPER>1
Теперь тебя устраивает having sum(VIL_OB)-max(VIL_OPER)>1

Думаю, не надо объяснять, что это разные вещи с разным результатом.


Fishka   (2002-09-30 16:58:00) [5]

>Johnmen © (30.09.02 15:38)
Если есть время и желание, то можете попробовать создать DBF файлик и сделать запрос такого вида.


>roottim (30.09.02 15:54)
Спасибо за совет, такой вариант запроса выдает верный результат.


roottim   (2002-09-30 15:54:00) [6]

навскидку попробуй
select DATA, VIL_OPER, sum(VIL_OB)
from "C:\aa.dbf"
group by DATA,VIL_OPER
having sum(VIL_OB)-max(VIL_OPER)>1


Johnmen   (2002-09-30 15:38:00) [7]

Результат запроса верный, т.е. полностью соответствует ожидаемому !
Если у тебя не так, то что-то ты недоговариваешь или делаешь неправильно.


Fishka   (2002-09-30 15:27:00) [8]

>passm © (30.09.02 12:18)
Конструкция SELECT ...FROM (SELECT ...) не проходит с dbf-файлами.

Johnmen © (30.09.02 13:33)
Запрос может и корректен, но результат запроса неверный.


Johnmen   (2002-09-30 13:33:00) [9]

>Fishka (30.09.02 11:57)

Можно ! Можно !
Запрос (24.09.02 12:04) корректен и работает правильно.


passm   (2002-09-30 12:18:00) [10]

Попробуй, вдруг получится:
SELECT T1.DATA, T1.VIL_OPER, T1.SUM_VIL_OB
FROM (SELECT Q1.DATA, Q1.VIL_OPEN, SUM(VIL_OB) AS SUM_VIL_OB
FROM "C:\aa.dbf" AS Q1
GROUP BY Q1.DATA, Q1.VIL_OPER) AS T1
WHERE T1.SUM_VIL_OB - T1.VIL_OPER > 1


Fishka   (2002-09-30 11:57:00) [11]

Может, кто-нибудь в предложении HAVING использовал значение поля группировки? Можно ли это сделать?


Fishka   (2002-09-26 10:48:00) [12]

Хочется получить ответ на вопрос:
можно ли использовать в предложении HAVING значение поля группировки?


Fishka   (2002-09-25 13:01:00) [13]

Да, именно это. Но этого я не получаю.
(Запись: 02.01.01 14 10 - такой записи не может быть, т.к. в группе значение VIL_OPER одинаково).


ЮЮ   (2002-09-25 11:48:00) [14]

>В итоге я получаю значения, у которых, например, sum(VIL_OB)-VIL_OPER=0.00
так получаешь или нет? :-)

Группа это что? Записи с одинаковой DATA и VIL_OPER?
Допустим есть записи
01.01.01 12 3
01.01.01 12 4
01.01.01 12 10

02.01.01 12 2
02.01.01 12 2
02.01.01 12 10

02.01.01 14 10

Ты хочешь получить именно это?
01.01.01 12 17
02.01.01 12 14



Fishka   (2002-09-25 09:04:00) [15]

В каждой группе проставлено одно и то же значение VIL_OPER.
Мне нужно выбрать все группы, в которых сумма по полю VIL_OB больше, чем значение поля VIL_OPER на 1.
В итоге я получаю значения, у которых, например,
sum(VIL_OB)-VIL_OPER=0.00


ЮЮ   (2002-09-25 06:15:00) [16]

>выдает некорректный результат.
не ожидаемый тобой результат не есть некорректный. Подробнее, какие данные есть и что хочешь получить?


Наверх

Титульная страница Поиск, карта сайта Написать письмо