Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.02.2014, 20:32
govorun govorun вне форума
Новичок
 
Регистрация: 30.10.2013
Сообщения: 60
Версия Delphi: delphi 7
Репутация: 10
По умолчанию Запрос к запросу

Имеется запрос1 к базе.
Как записать запрос2, что бы он работал ТОЛЬКО с данными, полученными в запросе1.
Что то типа
Код:
select...From adoquery1 where...

Можно конечно в запросе2 указать теже условия что и в запросе1, но для верности хочется работать с уже отобранными данными.
Ответить с цитированием
  #2  
Старый 16.02.2014, 20:36
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Это?
Код:
select * from
(
select 
  f1,f2,f3 
from 
  tbl1
) foo
where f1 = 1000;

А, вообще, можно и view сделать из первого запроса...
Ответить с цитированием
  #3  
Старый 16.02.2014, 20:47
govorun govorun вне форума
Новичок
 
Регистрация: 30.10.2013
Сообщения: 60
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Это?
Код:
select * from
(
select 
  f1,f2,f3 
from 
  tbl1
) foo
where f1 = 1000;

А, вообще, можно и view сделать из первого запроса...
Похоже, что не то...
Здесь происходит дублирование запроса1, а нужно работать с уже отобранными данными.
Может как то можно подвязать datasource, относящийся к adoquery1?
Ответить с цитированием
  #4  
Старый 16.02.2014, 22:06
govorun govorun вне форума
Новичок
 
Регистрация: 30.10.2013
Сообщения: 60
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Не догоняю я никак....
Вот первый запрос
Код:
A1:=STRTOINT(FORM2.Edit1.Text);
    ADOQUERY1.Close;
    ADOQUERY1.SQL.Text:='select S, OTD, DATA_POS, FIO, SUMMA, VAL, SD_V_KL, SD_V_CBU '+
                        'FROM INKASSO '+
                        'WHERE OTD=:A1 AND SD_V_KL<>1 AND SD_V_CBU<>1';
    ADOQUERY1.Parameters[0].Value:=A1;
    ADOQUERY1.Open;
Теперь нужно из первого запроса подсчитать сумму по полю 'SUMMA' where 'VAL' =30 as 30 и 'VAL' =40 as 40

AS 30 и AS 40 нужны, чтобы потом эти суммы показать в EDIT
Ответить с цитированием
  #5  
Старый 17.02.2014, 01:14
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Тогда считай кодом на клиенте. Напрямую Дельфи такое не позволяет.
Либо можно выполнить простенький дополнительный запрос, но он будет повторять этот запрос.
Ответить с цитированием
  #6  
Старый 17.02.2014, 10:09
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

да все правильно уважаемый lmikle написал
и это будет не "дублирование запроса1", а создание временной таблицы, типа, представь, что у тебя есть такая таблица, вот и выбирай с нее суммы, количества, средние...

т.е.

Код:
 SELECT (SELECT SUM(SUMMA) where VAL = 30) as Sum_30,  
           (SELECT SUM(SUMMA) where VAL = 40) as Sum_40 FROM 
           (SELECT S, OTD, DATA_POS, FIO, SUMMA, VAL, SD_V_KL, SD_V_CBU FROM INKASSO 
           WHERE OTD=:A1 AND SD_V_KL<>1 AND SD_V_CBU<>1) as My_New_Table
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
  #7  
Старый 17.02.2014, 13:48
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Код:
SELECT s, otd, data_pos, fio, summa, val, sd_v_kl, sd_v_cbu, SUM(IIF(val = 30, summa, 0)) s30, SUM(IIF(val = 40, summa, 0)) s40
FROM inkasso
WHERE otd = :a1
  AND sd_v_kl <> 1
  AND sd_v_cbu <> 1
GROUP BY 1, 2, 3, 4, 5, 6, 7, 8
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #8  
Старый 17.02.2014, 20:52
govorun govorun вне форума
Новичок
 
Регистрация: 30.10.2013
Сообщения: 60
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Mrak
да все правильно уважаемый lmikle написал
и это будет не "дублирование запроса1", а создание временной таблицы, типа, представь, что у тебя есть такая таблица, вот и выбирай с нее суммы, количества, средние...

т.е.

Код:
 SELECT (SELECT SUM(SUMMA) where VAL = 30) as Sum_30,  
           (SELECT SUM(SUMMA) where VAL = 40) as Sum_40 FROM 
           (SELECT S, OTD, DATA_POS, FIO, SUMMA, VAL, SD_V_KL, SD_V_CBU FROM INKASSO 
           WHERE OTD=:A1 AND SD_V_KL<>1 AND SD_V_CBU<>1) as My_New_Table

Только один вопрос: вот это "as My_New_Table" - произвольное имя?
Ответить с цитированием
  #9  
Старый 17.02.2014, 21:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да, произвольное. Многие сервера требуют, что бы внутренние запросы были именованные.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:52.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025