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

Вниз

Помогите с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.006 c
15-1233915107
Skyle
2009-02-06 13:11
2009.04.05
Самодельный EML и почтовая программа. Нельзя указать получателя.


1-1209297887
Volk
2008-04-27 16:04
2009.04.05
помогите


15-1233473207
oleg_babenko
2009-02-01 10:26
2009.04.05
Как в Delphi 2006 сделать горячие клавиши как в Delphi6


1-1209133936
Kolan
2008-04-25 18:32
2009.04.05
В MDI приложение WindowState := wsMaximized; происходит долго&#133


9-1178564278
Dovlet
2007-05-07 22:57
2009.04.05
KAk sozdat 3d cube s pomoshyu t.canvas





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский