![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]>выдает некорректный результат.
не ожидаемый тобой результат не есть некорректный. Подробнее, какие данные есть и что хочешь получить?