Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.041 c
3-1161230788
Tornado
2006-10-19 08:06
2006.12.31
Работа с SQL, база dbf


3-1161331615
vvrz
2006-10-20 12:06
2006.12.31
вызов хранимой процедуры MS SQL


15-1165440373
Arturrr
2006-12-07 00:26
2006.12.31
задача по физике


2-1165666026
xela
2006-12-09 15:07
2006.12.31
Передача текста в браузер


15-1165582706
pasha_golub
2006-12-08 15:58
2006.12.31
lex for pascal





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский