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

Вниз

Помогите с SQL-запросом   Найти похожие ветки 

 
AlexeyMir   (2008-08-06 09:31) [0]

Подскажите, пожалуйста, у меня есть приходные накладные TOV_IN(поля id, id_tov, price, quantity), мне нужно распечатать этикетки на весь товар который пришел, причем количество этикеток должно быть равным quantity.
Для печати этикеток я деляю SQL-запрос
select id_tov,price,quantity from TOV_IN, у меня получается
товар1   22,20   2
товар2   10,45   1
товар3   18,63   3
А как можно чтобы получать следующее?
товар1   22,20   2
товар1   22,20   2
товар2   10,45   1
товар3   18,63   3
товар3   18,63   3
товар3   18,63   3


 
Medbe}I{onok XML ©   (2008-08-06 09:34) [1]

не надо так делать


 
AlexeyMir   (2008-08-06 09:58) [2]

Но мне нужно продублировать строку столько же раз сколько указано в поле quantity

как можно чтобы получать следующее?
товар1   22,20   2
товар1   22,20   2
товар2   10,45   1
товар3   18,63   3
товар3   18,63   3
товар3   18,63   3


 
Сергей М. ©   (2008-08-06 10:06) [3]


> как можно чтобы получать следующее?
> товар1   22,20   2
> товар1   22,20   2


А зачем тогда поле Quantity в результирующем наборе ?


 
AlexeyMir   (2008-08-06 10:09) [4]

Извините, оно ненужно
товар1   22,20
товар1   22,20
товар2   10,45
товар3   18,63
товар3   18,63
товар3   18,63


 
Сергей М. ©   (2008-08-06 10:11) [5]

Т.е. ты хочешь одним-единственным SQL-запросом получить желаемое ?
Или все же тобой допускаются некие впомогательные телодвижения для получения требуемого НД ?


 
AlexeyMir   (2008-08-06 10:18) [6]

Я потом этот НД выгружаю в FreeReport, но там я не знаю как повторить MasterData1 определенное количество раз, поэтому спрашиваю может быть возможно это реализовать SQL-запросом.


 
Сергей М. ©   (2008-08-06 10:25) [7]


> потом этот НД выгружаю в FreeReport


Самое простое и очевидное - воспользоваться компонентом TfrxUserDataSet как посредником между FR-отчетом и НД, возвращенным в результате SQL-запроса.


 
a.a.j. ©   (2008-08-06 10:35) [8]


> AlexeyMir


попробуй написать процедурку с циклом


 
Сергей М. ©   (2008-08-06 10:35) [9]

Вот пример :


procedure TfrmDocument.frxUDSCheckEOF(Sender: TObject; var Eof: Boolean);
begin
 Eof := CDS.Tag = 0;
end;

procedure TfrmDocument.frxUDSFirst(Sender: TObject);
begin
 CDS.First;
 if not CDS.Eof then
   CDS.Tag := CDS.FieldValues["Quantity"]
 else
   CDS.Tag := 0;
end;

procedure TfrmDocument.frxUDSGetValue(const VarName: String; var Value: Variant);
begin
 Value := CDS.FieldValues[VarName];
end;

procedure TfrmDocument.frxUDSNext(Sender: TObject);
begin
 CDS.Tag := CDS.Tag - 1;
 if CDS.Tag = 0 then begin
   CDS.Next;
   if not CDS.Eof then
     CDS.Tag := CDS.FieldValues["Quantity"]
   else
   CDS.Tag := 0;
 end;
end;

procedure TfrmDocument.frxUDSPrior(Sender: TObject);
begin
 CDS.Tag := CDS.Tag + 1;
 if CDS.Tag > CDS.FieldValues["Quantity"] then begin
   CDS.Prior;
   if not CDS.Bof then
     CDS.Tag := CDS.FieldValues["Quantity"]
   else
     CDS.Tag := 0;
 end;
end;


Здесь CDS - любой компонент-наследник TDataSet, управляющий активным двунаправленным НД, полученным в рез-те SQL-запроса.


 
Ega23 ©   (2008-08-06 10:36) [10]

Можно и SQL-запросом. С подвыподвертом.


 
Сергей М. ©   (2008-08-06 10:42) [11]


> Ega23 ©   (06.08.08 10:36) [10]


Даже если можно, нет ни малейшего резона тянуть с сервера явно избыточную инф-цию, в то время как ее расчудесно с минимальными потугами можно сообразить на клиентской стороне. Тем более что фигурирует FR, который для подобных выкрутасов предоставляет простейший управляемый прокси-дейтасет в виде UDS-компонента.


 
Ega23 ©   (2008-08-06 10:50) [12]


> нет ни малейшего резона тянуть с сервера явно избыточную
> инф-цию, в то время как ее расчудесно с минимальными потугами
> можно сообразить на клиентской стороне


Кто-ж спорит-то?? Я из чисто академического интереса...


 
Сергей М. ©   (2008-08-06 10:58) [13]

Из чисто академического резонно было бы поинтересоваться конкретной СУБД, на которой преполагается реализация подобного запроса)


 
Виталий Панасенко(дом)   (2008-08-06 11:01) [14]

используй CDS и плоди записи столько раз, сколько тебе нужно. это чтобы на каждое изделие налепить?


 
Ega23 ©   (2008-08-06 11:05) [15]


> резонно было бы поинтересоваться конкретной СУБД, на которой
> преполагается реализация подобного запроса)


После этого тебя надо было бы расстрелять, т.к. это очень секретная СУБД. :)

В принципе, для FB, MSSQL и Postgres я такой запрос напишу.
Только он воистину нафик не нужен...


 
AlexeyMir   (2008-08-06 11:17) [16]

СУБД - Firebird

>В принципе, для FB, MSSQL и Postgres я такой запрос напишу.
Можно поинтересоваться, как все-таки такой запрос выглядит?


 
Сергей М. ©   (2008-08-06 11:19) [17]


> AlexeyMir   (06.08.08 11:17) [16]


Ты тоже академик ?)


 
Ega23 ©   (2008-08-06 11:25) [18]


> Можно поинтересоваться, как все-таки такой запрос выглядит?


В виде ХП, Один цикл по начальному НД, на каждой итерации доп. цикл от 1 до Quantity.


 
Сергей М. ©   (2008-08-06 11:51) [19]


> В виде ХП


В ХП и дурак смогет)

Ты сотвори базовыми средствами хотя бы sql"92)


 
Виталий Панасенко(дом)   (2008-08-06 12:11) [20]


> Сергей М. ©   (06.08.08 11:51) [19]

Если 2,х , то EXECUTE BLOCK


 
Ega23 ©   (2008-08-06 12:24) [21]


> Ты сотвори базовыми средствами хотя бы sql"92)


Вот мне делать нечего...  :)))


 
Johnmen ©   (2008-08-06 12:29) [22]

Переход значения в измерение не м.б. реализован никаким сколь угодно сложным запросом.
А программно всякий сможет. Или почти всякий...:)


 
Medbe}I{onok XML ©   (2008-08-06 12:36) [23]

select * from mytable, my_dummy_table_with_n_record
where mytable.qtty = n
[union]
.......


 
Евгений Р.   (2008-08-06 12:44) [24]


> Johnmen ©   (06.08.08 12:29) [22]

Наверное можно, используя доп.таблицу dop:
quantity
1
2
2
3
3
3
...
1000000
1000000 (миллион записей)
1000000

тогда
select id_tov,price
from TOV_IN,dop
where TOV_IN.quantity=dop.TOV_IN

но надо ли?


 
Евгений Р.   (2008-08-06 12:45) [25]

совпадушка


 
Johnmen ©   (2008-08-06 12:56) [26]


> Евгений Р.   (06.08.08 12:44) [24]

А поддерживать таблицу разве можно без запросов?
:)


 
Евгений Р.   (2008-08-06 14:02) [27]

создать одноразово, предусмотрев максимальное количество. Справочник своего рода.


 
Johnmen ©   (2008-08-06 14:42) [28]

Cлово "поддерживать" никак не связано со словом "создать" :))



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

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

Наверх




Память: 0.53 MB
Время: 0.019 c
2-1234344792
markers
2009-02-11 12:33
2009.04.05
Обращение к VCL объектам из потока


2-1234690810
Cobalt
2009-02-15 12:40
2009.04.05
Посоветуйте стандартный контрол


15-1233426561
deadteachers
2009-01-31 21:29
2009.04.05
LOST


15-1233896321
Unitay
2009-02-06 07:58
2009.04.05
Помогите, очень ищу


15-1233361254
Riply
2009-01-31 03:20
2009.04.05
Отступы в коде