Конференция "Базы" » Помогите с SQL-запросом [D5]
 
  • AlexeyMir (06.08.08 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 © (06.08.08 09:34) [1]
    не надо так делать
  • AlexeyMir (06.08.08 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
  • Сергей М. © (06.08.08 10:06) [3]

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


    А зачем тогда поле Quantity в результирующем наборе ?
  • AlexeyMir (06.08.08 10:09) [4]
    Извините, оно ненужно
    товар1   22,20
    товар1   22,20
    товар2   10,45
    товар3   18,63
    товар3   18,63
    товар3   18,63
  • Сергей М. © (06.08.08 10:11) [5]
    Т.е. ты хочешь одним-единственным SQL-запросом получить желаемое ?
    Или все же тобой допускаются некие впомогательные телодвижения для получения требуемого НД ?
  • AlexeyMir (06.08.08 10:18) [6]
    Я потом этот НД выгружаю в FreeReport, но там я не знаю как повторить MasterData1 определенное количество раз, поэтому спрашиваю может быть возможно это реализовать SQL-запросом.
  • Сергей М. © (06.08.08 10:25) [7]

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


    Самое простое и очевидное - воспользоваться компонентом TfrxUserDataSet как посредником между FR-отчетом и НД, возвращенным в результате SQL-запроса.
  • a.a.j. © (06.08.08 10:35) [8]

    > AlexeyMir


    попробуй написать процедурку с циклом
  • Сергей М. © (06.08.08 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 © (06.08.08 10:36) [10]
    Можно и SQL-запросом. С подвыподвертом.
  • Сергей М. © (06.08.08 10:42) [11]

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


    Даже если можно, нет ни малейшего резона тянуть с сервера явно избыточную инф-цию, в то время как ее расчудесно с минимальными потугами можно сообразить на клиентской стороне. Тем более что фигурирует FR, который для подобных выкрутасов предоставляет простейший управляемый прокси-дейтасет в виде UDS-компонента.
  • Ega23 © (06.08.08 10:50) [12]

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


    Кто-ж спорит-то?? Я из чисто академического интереса...
  • Сергей М. © (06.08.08 10:58) [13]
    Из чисто академического резонно было бы поинтересоваться конкретной СУБД, на которой преполагается реализация подобного запроса)
  • используй CDS и плоди записи столько раз, сколько тебе нужно. это чтобы на каждое изделие налепить?
  • Ega23 © (06.08.08 11:05) [15]

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


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

    В принципе, для FB, MSSQL и Postgres я такой запрос напишу.
    Только он воистину нафик не нужен...
  • AlexeyMir (06.08.08 11:17) [16]
    СУБД - Firebird

    >В принципе, для FB, MSSQL и Postgres я такой запрос напишу.
    Можно поинтересоваться, как все-таки такой запрос выглядит?
  • Сергей М. © (06.08.08 11:19) [17]

    > AlexeyMir   (06.08.08 11:17) [16]


    Ты тоже академик ?)
  • Ega23 © (06.08.08 11:25) [18]

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


    В виде ХП, Один цикл по начальному НД, на каждой итерации доп. цикл от 1 до Quantity.
  • Сергей М. © (06.08.08 11:51) [19]

    > В виде ХП


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

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

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

    Если 2,х , то EXECUTE BLOCK
  • Ega23 © (06.08.08 12:24) [21]

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


    Вот мне делать нечего...  :)))
  • Johnmen © (06.08.08 12:29) [22]
    Переход значения в измерение не м.б. реализован никаким сколь угодно сложным запросом.
    А программно всякий сможет. Или почти всякий...:)
  • Medbe}I{onok XML © (06.08.08 12:36) [23]
    select * from mytable, my_dummy_table_with_n_record
    where mytable.qtty = n
    [union]
    .......
  • Евгений Р. (06.08.08 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

    но надо ли?
  • Евгений Р. (06.08.08 12:45) [25]
    совпадушка
  • Johnmen © (06.08.08 12:56) [26]

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

    А поддерживать таблицу разве можно без запросов?
    :)
  • Евгений Р. (06.08.08 14:02) [27]
    создать одноразово, предусмотрев максимальное количество. Справочник своего рода.
  • Johnmen © (06.08.08 14:42) [28]
    Cлово "поддерживать" никак не связано со словом "создать" :))
 
Конференция "Базы" » Помогите с SQL-запросом [D5]
Есть новые Нет новых   [134435   +35][b:0][p:0.002]