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

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

Безвыходное положение. Помогите с запросом. [D7, dBase, FoxPro]


RebroFF ©   (2006-10-20 10:47:00) 

Доброе утро всем. Вопрос к тем, кто силён в SQL. Помогите, пожалуйста, построить запрос. В таблице есть поля:nomer, vid,summa. Нужно сделать выборку записей, группируя по полю nomer, отвечающих следующему критерию:величина, равная разности сумм значений поля summa для vid равного 18,35,01 и т.д., и сумм значений поля summa для vid равного 40, должна быть больше 1000. Каждая величина расчитывается в пределах группы по полю nomer. Я-новичок в этом. Уже голова квадратная, а ничего не выходит.:)
Вот мои потуги:

select nomer,mtb60."sum",sum(IIF(inlist(vid,01,18,35,12,32,15,38),mtb60."sum",0)) - SUM(IIF(inlist(vid,40),mtb60."sum",0))
from mtb60
group by nomer,mtb60."sum"
having sum(IIF(inlist(vid,01,18,35,12,32,15,38),mtb60."sum",0)) - SUM(IIF(inlist(vid,40),mtb60."sum",0))>1000

BDE выдаёт ошибку "Cappability not supported".


Johnmen   (2006-10-20 12:17:00) [1]


> RebroFF   (20.10.06 11:56) [8]
> Извините, не совсем понял, что такое Т1,Т2,Т3?


Псевдонимы таблицы.


RebroFF   (2006-10-20 12:04:00) [2]


> ЮЮ ©   (20.10.06 12:01) [9]

Спасибо. Буду реализовывать.


ЮЮ   (2006-10-20 12:01:00) [3]

Создаем две вьюшки:
 sumNot40.sql:
SELECT nomer, SUM(mtb60."sum") Summ
FROM mtb60
WHERE vid <> 40

GROUP BY nomer
и sum40.sql с WHERE vid = 40

Теперь в Query пишем

SELECT
 a.nomer, a.Summ SummA, b.Summ SummB,  a.Summ - b.Summ SummAB
FROM
 "sumNot40.sql" a
 JOIN "sum40.sql" b ON a.nomer = b.nomer
WHERE
 a.Summ - b.Summ > 1000


RebroFF   (2006-10-20 11:56:00) [4]

2Johnmen
Извините, не совсем понял, что такое Т1,Т2,Т3?


Johnmen   (2006-10-20 11:53:00) [5]

Примерно так
SELECT ... FROM Table T1
WHERE 1000 <
 (SELECT SUM(T2.summa) FROM Table T2
  WHERE T2.vid IN (01,18,35,12,32,15,38) AND T2.nomer=T1.nomer) -
 (SELECT SUM(T3.summa) FROM Table T3
  WHERE T3.vid IN (40) AND T3.nomer=T1.nomer)


RebroFF   (2006-10-20 11:49:00) [6]

Да. Программа на Delphi. Набор данных в Query.


ЮЮ   (2006-10-20 11:47:00) [7]

БДЕ?


RebroFF   (2006-10-20 11:44:00) [8]


> 01,18,35,12,32,15,38 - это все виды, исключая 40

Да. Все.

> Если по виду 40 вообще нет данных, то считать их 0 или игнорировать
> вообще?

Игнорировать.
Извините за задержку с ответом:)


ЮЮ   (2006-10-20 11:15:00) [9]

Успокойся. Получить такое в БДЕ одним запросом - и не новичку достаточно сложно.

01,18,35,12,32,15,38 - это все виды, исключая 40? Или есть еще, но в запросе не участвуют?

Если по виду 40 вообще нет данных, то считать их 0 или игнорировать вообще?


ЮЮ   (2006-10-20 10:55:00) [10]

IIF, inlist - какой движок используешь?


MsGuns   (2006-10-20 10:55:00) [11]

Вы написали запрос по стандарту TSQL (IIF), а BDE поддерживает Local SQL, где такого оператора нет.


Наверх

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