Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2011, 14:33   #1
drak2000
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 11
По умолчанию запрос+union+цикл

Привет всем. Подскажите, как сделать такую штуку. Есть запрос, значения беру из поля таблицы, в котором данные № журнала. На выходе нужно получить, например журнал№1-список людей по алфавиту, журнал№2-список людей по алфавиту. Для этого нужно, как я понимаю все формируемые запросы сложить UNION. Только не получается после последнего добавления запроса не добавлять в запрос слово UNION. Сам код:
Код:
....
begin 
QRV.Close;
 QRV.SQL.Clear;
    for i := 0 to QRVAr.RecordCount - 1 do
        begin
         QRV.SQL.Add(' SELECT TOP (100) PERCENT JJ.Num, C.Name, JJ.Date2, ');
         QRV.SQL.Add(' JJ.Price  ');
         QRV.SQL.Add(' FROM dbo.Jurnal AS JJ INNER JOIN ');
         QRV.SQL.Add('      dbo.Clients AS C ON JJ.Num = C.Num ');
         QRV.SQL.Add(' WHERE (JJ.Date1 = '+DM1.UsersDate.AsString+')');
         QRV.SQL.Add(' AND (JJ.Num2'+Num+') AND ');
         QRV.SQL.Add(' (C.Area ='+IntToStr(QRVAr.FieldByName'Area').Value)+')');
         end; // for
// как здесь добавить цикл добавления UNION???
QRV.Open;
   end;
сам запрос рабочий...



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 30.06.2011 в 15:08.
drak2000 вне форума Ответить с цитированием
Старый 30.06.2011, 15:28   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

вариат БЕЗ union
использовать подзапрос (вложенный запрос) и оператор in

+ ' (C.Area in ( select area from //здесь нужен текст запроса QRVAr.

SELECT Num, C.Name, JJ.Date2, JJ.Price
FROM dbo.Jurnal AS JJ INNER JOIN dbo.Clients AS C ON JJ.Num = C.Num
WHERE (JJ.Date1 = .....)
AND (C.Area in ( select area from ..... ) )

)'
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.06.2011 в 15:31.
evg_m вне форума Ответить с цитированием
Старый 30.06.2011, 17:37   #3
drak2000
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
вариат БЕЗ union
использовать подзапрос (вложенный запрос) и оператор in

+ ' (C.Area in ( select area from //здесь нужен текст запроса QRVAr.

SELECT Num, C.Name, JJ.Date2, JJ.Price
FROM dbo.Jurnal AS JJ INNER JOIN dbo.Clients AS C ON JJ.Num = C.Num
WHERE (JJ.Date1 = .....)
AND (C.Area in ( select area from ..... ) )

)'
И так нужно цикл на проверку количества добавлений в запрос. Как бы по-понятней пояснить. Количество добавлений запроса должно соответствовать кол-ву записей в таблице QRVAr а кол-во добавлений UNION: кол-во записей QRVAr МИНУС 1. Но как сделать проверку???
drak2000 вне форума Ответить с цитированием
Старый 30.06.2011, 20:17   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

как бы это понятней объяснить...
я согласен с evg_m.
вместо цикла по всем записям QRVar и формирования гигантского запроса с кучей union можно просто написать ОДИН запрос (вообще без UNION) в котором использовать таблицу/запрос, который Вам возвращает QRVAR
и всё!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Union mansp Общие вопросы C/C++ 6 30.11.2010 21:48
Цикл на запрос bskjohn Microsoft Office Excel 3 04.02.2010 13:02
Union NeiL Общие вопросы C/C++ 1 30.05.2008 23:45
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34