Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.31;
Скачать: CL | DM;

Вниз

Безвыходное положение. Помогите с запросом.   Найти похожие ветки 

 
RebroFF   (2006-10-20 10:47) [0]

Доброе утро всем. Вопрос к тем, кто силён в 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".


 
ЮЮ ©   (2006-10-20 10:55) [1]

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


 
MsGuns ©   (2006-10-20 10:55) [2]

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


 
ЮЮ ©   (2006-10-20 11:15) [3]

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

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

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


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


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

Да. Все.

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

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


 
ЮЮ ©   (2006-10-20 11:47) [5]

БДЕ?


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

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


 
Johnmen ©   (2006-10-20 11:53) [7]

Примерно так
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:56) [8]

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


 
ЮЮ ©   (2006-10-20 12:01) [9]

Создаем две вьюшки:
 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 12:04) [10]


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

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


 
Johnmen ©   (2006-10-20 12:17) [11]


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


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



Страницы: 1 вся ветка

Текущий архив: 2006.12.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
15-1165485474
Vaitek__
2006-12-07 12:57
2006.12.31
Два вопроса по винде :-)


2-1166100563
Ольчик
2006-12-14 15:49
2006.12.31
максимальное значение в count


2-1165829964
Baisak
2006-12-11 12:39
2006.12.31
Работа с БД


15-1165376593
Slider007
2006-12-06 06:43
2006.12.31
С днем рождения ! 6 декабря


15-1165499974
MsGuns
2006-12-07 16:59
2006.12.31
Переименование конференции