Форум: "Базы";
Текущий архив: 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