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